1、window下默认小端存储
如float val = 30;
linux下默认大端存储
2、command结构体所占内存(32字节)
设定type 3
所占内存&command为(window下)
全部为小端存储
理解为:单个数值,转成对应个数的字节时,内存中小端排列
但command每个值并不影响
3、打印存储
(1)若uint8_t* temp = (uint8_t*)&command;
printf("\n");
for (size_t i = 0; i < 32; ++i) {
printf("% .2X ", val[i]);
}
printf("\n");
则打印对应得每个字节;
(1)若uint16_t* temp = (uint16_t*)&command;
内存中的顺序保持不变
接收打印的顺序变化
printf("\n");
for (size_t i = 0; i < 32; ++i) {
printf("% .2X ", temp[i]);
}
以上为按2位接收,多出来的只截取低位,因此结果为:
若打印4位十六进制(2字节),正好接收
printf("\n");
for (size_t i = 0; i < 16; ++i) {
printf("% .4X ", val[i]);
}
printf("\n");
对于每一个uint16_t来说,相当于将内存内容按每两个字节存放在数组当中,这两个字节会按高低位进行排列,前面得永远是高位,后面是低位(这个要与内存内容区分开,按照大小端的不同,存放的方式也不同,但打印显示出来的高位和地位是一定的)。
即:
window下内存存放永远是低位->高位,但是打印显示出来的顺序是高位到低位。同时,若打印2字节数组,只打印前2位,打印的是低位数据;若打印4位,正好全部打印;若打印超过4位,超出限制,前面补0。
(2)若uint32_t* temp = (uint32_t*)&command;
printf("\n");
for (size_t i = 0; i < 32; ++i) {
printf("% .8X ", temp[i]);
}
64位系统中,8字节指针temp,指向4字节有效内存空间,每次打印8位16进制数字。