【发布时间】:2018-02-05 09:18:00
【问题描述】:
我正在编写一个例程来将字节附加到一个字节数组中
unsigned long speed = 0xfeb;
char byteArray[8];
bzero(byteArray,8); //fills every of the 8 bytes with zero
memcpy(byteArray,&speed ,4); //copies 4 bytes from speed to byteArray
在操作之后,我希望 byteArray 的值是 0xfeb,但事实证明 byteArray 的值是 0xebf
发生了什么? memcpy 将结果强制为 little-endianness 是否正常?在不改变字节顺序的情况下我应该怎么做才能得到结果?
【问题讨论】:
-
没有规范。字节序取决于您的平台。
-
另外,
byteArray应该有0xeb, 0x0f。 -
输出将采用系统的字节顺序。如果你想控制这个,位交换到你想要的形式。
__builtin_bswap32()和其他所有编译器都可用。 -
memcpy会盲目地将数据从源复制到目标,数据在源和目标中如何排列以及如何处理取决于您的平台。 -
为什么你认为字节序正在改变?
标签: c++ c pointers endianness