在C中初始化一个整数数组,在x86下的RAM中它是什么样子的? 当在x86 PC CPU上运行时,上述内容在RAM十六进制转储中逐字节显示如何

在C中初始化一个整数数组,在x86下的RAM中它是什么样子的? 当在x86 PC CPU上运行时,上述内容在RAM十六进制转储中逐字节显示如何,c,sockets,constants,ipv6,endianness,C,Sockets,Constants,Ipv6,Endianness,通过使用无符号字符* u_int32_t ip6_address[1][4] = { {0x00000001, 0x0, 0x0, 0x12345678} }; 有时,只需看一下就可以了: void dump(void *address, size_t bytes) { unsigned char *p = address; while (bytes--) printf("%02X ", *p++); puts(""); } $cat example.c #包括 ui

通过使用
无符号字符*

u_int32_t ip6_address[1][4] = { {0x00000001, 0x0, 0x0, 0x12345678} };

有时,只需看一下就可以了:

void dump(void *address, size_t bytes) {
    unsigned char *p = address;
    while (bytes--) printf("%02X ", *p++);
    puts("");
}
$cat example.c
#包括
uint32_t ip6_地址[1][4]={{0x00000001,0x0,0x0,0x12345678};
$make example.o
叮当声-Wall-Wextra-pedantic-c-o示例.o示例.c
$otool-d示例.o
示例o:
(_数据,_数据)部分
0000000000000000    01 00 00 00 00 00 00 00 00 00 00 00 78 56 34 12 

您可以对第二个示例执行类似操作。

是的,说明中有little endian x86。您是否尝试在调试器中查看它?或者仅仅在目标文件中?是什么阻止了你打印内存内容?我不明白你为什么不看一看——不管怎样,如果你阅读了机器的文档,你可以很容易地手工重建它,是的。或者我可以使用调试器。但这与这个问题无关。好的,按照我的例子中相同的步骤操作。定义一个,编译它,然后转储对象文件。完成。如果你想手工操作,网络字节顺序是big-endian。如果你没有立即可用的Linux,为什么要在意呢?无论如何,你无法利用这些信息做任何有用的事情。为什么不等到下一次有可用的机器时,找出答案,然后根据结果做任何你想做的事情呢?我假设IPv6地址看起来像
00 00 01 00 00 00 00 12 34 56 78
$ cat example.c 
#include <stdint.h>
uint32_t ip6_address[1][4] = { {0x00000001, 0x0, 0x0, 0x12345678} };
$ make example.o
clang -Wall -Wextra -pedantic   -c -o example.o example.c
$ otool -d example.o 
example.o:
(__DATA,__data) section
0000000000000000    01 00 00 00 00 00 00 00 00 00 00 00 78 56 34 12