内存-大小端

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进制数字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值