OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4383|回复: 4

C语言指针合并转换类型的问题

[复制链接]

27

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2016-8-31
在线时间
252 小时
发表于 2022-8-20 16:51:25 | 显示全部楼层 |阅读模式
100金钱
本帖最后由 宫本无三四 于 2022-8-20 17:01 编辑

如下一段程序:
    u16 a;
    u8 c[4]={0x01,0x02,0x03,0x04};
    a=*(u16*)(c+1); //第二和第三个u8变量组成一个u16变量
    printf("%04x\n",a);

我期待的打印值是0203,但实际上是0302,为什么?


最佳答案

查看完整内容[请看2#楼]

知道了,stm32是小端模式, 参考:https://blog.csdn.net/qq_33795842/article/details/121043879
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

27

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2016-8-31
在线时间
252 小时
 楼主| 发表于 2022-8-20 16:51:26 | 显示全部楼层
回复

使用道具 举报

27

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2016-8-31
在线时间
252 小时
 楼主| 发表于 2022-8-20 17:05:53 | 显示全部楼层
好像是因为多字节的数据存储时低位在前高位在后?不确定。。
回复

使用道具 举报

3

主题

805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3831
金钱
3831
注册时间
2017-3-7
在线时间
1671 小时
发表于 2022-8-22 11:56:58 | 显示全部楼层
是编译器默认是小端,可以设置成大端
回复

使用道具 举报

0

主题

451

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3510
金钱
3510
注册时间
2016-3-19
在线时间
846 小时
发表于 2022-8-22 15:32:50 | 显示全部楼层
因为您使用的平台是小端模式

在内存中低字节存放在小的地址上,高字节存放在大的地址上

addr0   addr1   addr2  addr3
0x01     0x02     0x03    0x04

所以 a = 0x0302
Nothing is impossible
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 07:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表