为什么 std::copy 顺序相反

why std::copy in reverse order

我想将一个字节序列复制成整数值,大概他们会随心所欲地使用端口的 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.

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

x01 x02 x03 x04

但在其他人身上,情况恰恰相反。这是大端与小端。 little endian vs. big endian 的 google 会产生一些值得阅读的好页面,所以我不打算在这里全部写下来。

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

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