小端和大端系统的十六进制表示
Hexadecimal representation on little and big endian systems
考虑以下代码:
unsigned char byte = 0x01;
在 C/C++
中,十六进制将被视为 int
,因此将被扩展为一个字节以上。因为多了一个字节,如果系统使用little或big endian都有影响。我的问题是这将扩展什么?
如果系统有 int
包含 4 个字节,它将扩展到以下哪个:
0x00000001 或 0x01000000
字节顺序会影响它将扩展到其中的哪一个?
字节序无关紧要。字节序仅与值在内存中的存储方式有关。但是内存中存储的内容所代表的值将是0x01,无论它如何存储。
以值0x01020304为例。它可以作为 01 02 03 04
或 04 03 02 01
存储在内存中。但在这两种情况下,它仍然是值 0x01020304(或 16 909 060)。
它完全是特定于体系结构的。编译器根据您计算机的字节序生成输出。假设你的微处理器是big-endian,编译器会产生;
char x = 0x01; --> 01,
int x = 0x01; --> 00 00 00 01
另一方面,如果您使用针对 little-endian 的交叉编译器,或者您在 little-endian 机器上编译代码,它将生成;
char x = 0x01; --> 01
int x = 0x01; --> 01 00 00 00
总之,输出没有标准或默认的字节顺序,输出将特定于编译器所针对的体系结构。
考虑以下代码:
unsigned char byte = 0x01;
在 C/C++
中,十六进制将被视为 int
,因此将被扩展为一个字节以上。因为多了一个字节,如果系统使用little或big endian都有影响。我的问题是这将扩展什么?
如果系统有 int
包含 4 个字节,它将扩展到以下哪个:
0x00000001 或 0x01000000
字节顺序会影响它将扩展到其中的哪一个?
字节序无关紧要。字节序仅与值在内存中的存储方式有关。但是内存中存储的内容所代表的值将是0x01,无论它如何存储。
以值0x01020304为例。它可以作为 01 02 03 04
或 04 03 02 01
存储在内存中。但在这两种情况下,它仍然是值 0x01020304(或 16 909 060)。
它完全是特定于体系结构的。编译器根据您计算机的字节序生成输出。假设你的微处理器是big-endian,编译器会产生;
char x = 0x01; --> 01,
int x = 0x01; --> 00 00 00 01
另一方面,如果您使用针对 little-endian 的交叉编译器,或者您在 little-endian 机器上编译代码,它将生成;
char x = 0x01; --> 01
int x = 0x01; --> 01 00 00 00
总之,输出没有标准或默认的字节顺序,输出将特定于编译器所针对的体系结构。