我想将一个字节序列复制为整数值,大概他们会随心所欲地使用端口的 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。
答案 0 :(得分:0)
这是一件非常脆弱的事情。正如其中一条评论中提到的,这取决于字节序。可以存储数字 0x01020304:
x01 x02 x03 x04
但在其他人身上,情况正好相反。这是大端与小端。 little endian vs. big endian
的谷歌会产生一些很棒的页面来阅读,所以我不打算在这里写下所有内容。
在您使用的硬件上,字节序与您期望的相反。
基本上,你不能假设。有处理网络字节顺序的方法。这个问题有更多信息:How do you write (portably) reverse network byte order?