为什么 std::copy 以相反的顺序

时间:2021-03-30 08:15:35

标签: c++ stl memcpy

我想将一个字节序列复制为整数值,大概他们会随心所欲地使用端口的 UPD

#include <iostream>
#include <cstring>

int main()
{
    uint8_t arr[8];
    uint32_t arrNew[2];

    arr[0] = 0x11;
    arr[1] = 0x22;
    arr[2] = 0x33;
    arr[3] = 0x44;
    arr[4] = 0x55;
    arr[5] = 0x66;
    arr[6] = 0x77;
    arr[7] = 0x88;

    memcpy(arrNew, arr, 8);

    std::cout << std::hex << arrNew[0] << "\n"; //out: 0x44332211
    std::cout << std::hex << arrNew[1] << "\n"; //out: 0x88776655

    return 0;
}

应该是: arrNew[0] = 0x11223344 arrNew[1] = 0x55667788。

1 个答案:

答案 0 :(得分:0)

这是一件非常脆弱的事情。正如其中一条评论中提到的,这取决于字节序。可以存储数字 0x01020304:

x01 x02 x03 x04

但在其他人身上,情况正好相反。这是大端与小端。 little endian vs. big endian 的谷歌会产生一些很棒的页面来阅读,所以我不打算在这里写下所有内容。

在您使用的硬件上,字节序与您期望的相反。

基本上,你不能假设。有处理网络字节顺序的方法。这个问题有更多信息:How do you write (portably) reverse network byte order?

相关问题