C memcpy复制具有少量字节序的字节

时间:2018-02-05 09:18:00

标签: 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将结果强制为little-endianness是正常的吗?如果不改变字节顺序,我该怎么做才能得到结果?

2 个答案:

答案 0 :(得分:6)

memcpy只复制字节而不关心字节序:

  

将src指向的对象的count个字节复制到dest指向的对象。这两个对象都被重新解释为unsigned char数组。

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

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

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

答案 1 :(得分:1)

memcpy完全按照它在锡上所说的那样:它复制内存。它并没有搞乱字节的排序。

如果您想知道特定位模式如何映射到整数类型的值,则仅使用字节顺序。民间倾向于将各种事物归咎于字数:在大多数情况下它会产生良性效果,而且就是这种情况。