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

标签 c gdb endianness

little endian 机器上,我尝试使用 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数组数据会有区别? 看起来值变量存储为大端,我是否遗漏了什么?

最佳答案

变量buffer是四个字节

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

变量value是四个字节

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

并且 x 命令以 native 字节顺序显示(在您的情况下为小端),导致您获得输出。

关于c - 检查整数和字符数组的内存时字节顺序不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53556320/

相关文章:

c -\t 和\b 做什么?

以二进制格式组合两个文件

用于执行 Python struct.pack ('>I' ,val 的 C++ 代码

c - pthread 中的读/写锁

c - 链接器选项,路径总和太长?

batch-file - 如何让 gdb 重复获取堆栈跟踪?

用源代码中的值替换变量的 C 编程工具

ios - 如何使用 Xcode 调试器打印出属性的内容?

endianness - 大端与小端机器

c++ - 处理 .wav 文件期间输出失真