通过memcpy将unsigned char数组转换为unsigned int返回unsigned char数组是相反的

biz*_*ack 4 c c++

这不是跨平台代码......一切都在同一平台上执行(即endianess是相同的..小端).

我有这个代码:


    unsigned char array[4] = {'t', 'e', 's', 't'};
unsigned int out = ((array[0]<<24)|(array[1]<<16)|(array[2]<<8)|(array[3])); std::cout << out << std::endl;
unsigned char buff[4]; memcpy(buff, &out, sizeof(unsigned int));
std::cout << buff << std::endl;

我希望buff的输出是"test"(由于缺少'/ 0'而带有垃圾尾随字符),而输出是"tset".显然改变我正在移动的字符顺序(3,2,1,0而不是0,1,2,3)解决了问题,但我不明白这个问题.memcpy不按我期望的方式行事吗?

谢谢.

Gre*_*ill 9

这是因为你的CPU是小端的.在内存中,数组存储为:

      +----+----+----+----+
array | 74 | 65 | 73 | 74 |
      +----+----+----+----+
Run Code Online (Sandbox Code Playgroud)

这通过增加右侧的字节地址来表示.但是,整数存储在内存中,左侧的最低有效字节:

    +----+----+----+----+
out | 74 | 73 | 65 | 74 |
    +----+----+----+----+
Run Code Online (Sandbox Code Playgroud)

这恰好代表整数0x74657374.使用memcpy()可复印成buff反转从原始字节array.