如何在C ++中反转十六进制的顺序

时间:2019-03-27 08:32:59

标签: c++

首先,我有一个char array存储数据

unsigned char dat[3];

memset(dat, 0, sizeof(dat));                    
memcpy(dat, &no, 2);

当我检查dat时,它包含一个0xfd 0x01的十六进制 因为no的值为509,十六进制应为0x01 0xfd

我想知道我是否应该关注十六进制的顺序, 我应该更改订单。非常感谢

2 个答案:

答案 0 :(得分:2)

您的系统是小端的。它与硬件有关,在小端字节序平台上,第一个字节作为多字节值的一部分时,是最低有效位。查找:https://en.wikipedia.org/wiki/Endianness

本质上,如果CPU是低端字节序,则值0x12345689将表示为以0x89开头的字节集。在大字节序上它的顺序相反,而在混合字节序上,它可能在运行时发生变化。

答案 1 :(得分:1)

问题实际上是您接下来要做什么?在您当前的硬件(Little Endian)上,这是系统如何对数字字节进行排序的方式。最低有效字节在前:0xfd 0x01。

如果出于任何原因您确实希望交换此字节顺序,请签出:How do I convert between big-endian and little-endian values in C++?