c++ - C memcpy 以小字节序复制字节

标签 c++ c pointers endianness

我编写了一个例程,将字节附加到 byte_array 中,如下所示

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 将结果强制为小尾数是否正常?我应该怎么做才能在不改变字节顺序的情况下获得结果?

最佳答案

memcpy仅复制字节,不关心字节顺序:

Copies count bytes from the object pointed to by src to the object pointed to by dest. Both objects are reinterpreted as arrays of unsigned char.

如果您使用的是小端机器,它将首先复制 LSB。在大端机器上,它将首先复制 MSB,您将得到预期的 0x0f 0xeb

<小时/>

不相关,但您不应使用硬编码值,而应使用 sizeof,例如

unsigned long speed = 0xfeb;
char byteArray[sizeof(speed)];
bzero(byteArray, sizeof(byteArray));
memcpy(byteArray, &speed , sizeof(speed));

关于c++ - C memcpy 以小字节序复制字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48619160/

相关文章:

c++ - 将 std::string 转换为 char* 的争论

c++ - 如何使openCV的solvePNP头部姿势估计输出更准确

java - 解析格式错误的 HTML 文档

c++ - 使用指针获取用户输入

c++ - 指针加法和元素大小

c++ - mgiza 编译错误

c++ - 使用 SDL_Flip 的 SDL 视频叠加层闪烁

c - 递归函数求和两个其他之间的数字

java - JNA。 char* 不包含结果

java - 拥有一个包含指向大多数对象的指针并通过它引用对象的类是一种不好的做法吗?