检查整数和char数组的内存时字节顺序不一致

时间:2018-11-30 11:06:11

标签: c gdb endianness

在一台小端机器上,我正在尝试使用GDB检查以下变量的内存。

int main()
{
      char buffer[4] = "1234";
      int value = 0x31323334;
          //ascii - "1 2 3 4"

      retun 0;
}

我希望看到的是:

对于缓冲区变量-0x34333231 对于值变量-0x34333231

但是,GDB检查的输出是:

(gdb) show endian
The target endianness is set automatically (currently little endian)

(gdb) x/w &value 
0x7fffffffe440: 0x31323334
(gdb) x/w buffer
0x7fffffffe444: 0x34333231

为什么将int和char数组数据存储在内存中有什么区别? 看起来值变量存储为大端字节,我丢失了什么吗?

1 个答案:

答案 0 :(得分:2)

变量buffer是四个字节

+------+------+------+------+
| 0x31 | 0x32 | 0x33 | 0x34 |
+------+------+------+------+
^                           ^
|                           |
Low address                 High address

变量value是四个字节

+------+------+------+------+
| 0x34 | 0x33 | 0x32 | 0x31 |
+------+------+------+------+
^                           ^
|                           |
Low address                 High address

x命令以本机字节顺序显示(在您的情况下为小尾数),从而得到输出。