【问题标题】:memcpy from unsigned char * to unsigned int [closed]memcpy 从 unsigned char * 到 unsigned int [关闭]
【发布时间】:2017-06-23 23:57:37
【问题描述】:

我不确定以下 C++ 代码的作用(我已将与点无关的部分替换为点):

unsigned char* p = ...;
unsigned int metaNum;
memcpy( &metaNum, p, sizeof( unsigned int ) );
p += sizeof( unsigned int );

for ( unsigned int m = 0; m < metaNum; m++ ) {

...

}

我知道memcpy

源和指向的对象的底层类型 目标指针与此函数无关;结果是一个 数据的二进制副本。

我仍然不确定metaNum 的解释是什么。是显而易见的还是与实现有关?

【问题讨论】:

    标签: c++ memcpy unsigned-integer unsigned-char


    【解决方案1】:

    这不是特定于实现的:metaNum 被解释为sizeof(unsigned int) 字节序列,p 指向的相同字节数的内容被复制到其中。

    这里唯一起作用的是endianness:复制到metaNum 的相同字节序列将根据硬件存储多字节值的方式(例如unsigned int)进行不同的解释。如果序列来自相同的硬件,则解释将是相同的。否则,您将需要使用 ntoh/hton 函数将字节序列排列成正确的顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 2013-05-16
      • 2014-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多