小端存储输出后
发布时间: 2022-07-27 09:15:23
1. 大端存储和小端存储的区别
大端模式就是低位存放在高地址上。高位存放在地址上。
小端模式就是地位存放在低地址上。高位存放在高地址上。
例如,16bit宽的数0x1234在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:
内存地址 0x4000 0x4001
存放内容 0x34 0x12
而在Big-endian模式CPU内存中的存放方式则为:
内存地址 0x4000 0x4001
存放内容 0x12 0x34
2. C语言问题求解
这个问题涉及到内存分布,在这里我假设你的电脑采用小端格式存储数据(小端格式存储不了解的话先网络下)。
1、首先可以列出第一个语句 struct data d = {"", -3, 769} 赋值后的内存分布,分布如下:
00 00 00 00 00 00 00 00 fd ff ff ff 01 03 00 00
从内存分布可知前8个0就是d.str,0xfffffffd代表d.arr[0] =-3,0x00000301代表d.arr[1]=769
注:默认从左往右的地址为从低到高,符合小端格式的设定
2、执行scanf("%s", d.str);//这里输入1234abcdef 语句后的内存分布如下:
31 32 33 34 61 62 63 64 65 66 00 ff 01 03 00 00
由于"1234abcdef"的长度10超过了a.str的大小8,那么后面的2字节就会被覆盖,从内存上看,从左往右的10个字节分别对应于"1234abcdef"的ascii码;那么为什么0x66('f')后面的字节为0了呢?那是因为字符串以'