memcpy 从无符号字符 * 到无符号 int

memcpy from unsigned char * to unsigned int

本文关键字:无符号 int 字符 memcpy      更新时间:2023-10-16

我不确定以下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的解释是什么.这是显而易见的还是与实现有关?

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

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