【发布时间】:2021-02-07 13:09:32
【问题描述】:
考虑以下代码:
unsigned char byte = 0x01;
在C/C++ 中,十六进制将被视为int,因此将扩展为多于一个字节。因为多于一个字节,如果系统使用小端或大端都有影响。我的问题是这将扩展什么?
如果系统有 int 包含 4 个字节,它将扩展到以下哪个:
0x00000001 或 0x01000000
字节顺序是否会影响到它们中的哪一个?
【问题讨论】:
-
在这种情况下没关系。
byte将以任何方式结束0x01。 -
您实际上是在问
int x = 0x01对x的值的结果是什么?或者构成x的字节在内存中的底层值是多少? -
我的问题是关于字节的,是否有可能在某些系统上它会被扩展并最终得到值 0,而不是 1。现在我明白它不可能发生,在这种情况下,x 的值是多少?
-
"如果系统有 'int' 包含 4 个字节"。
0x01in memory 的 32 位表示在 little-endian 系统中为01 00 00 00,在 bigendian 系统中为00 00 00 01。什么都没有丢失。如果您存储在一个字节中,则无论如何都是01。
标签: c++ c hex endianness