OpenEdv-开源电子网

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

为了不警告强制变类型,单片机会乱改数据吗?

[复制链接]

45

主题

267

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1101
金钱
1101
注册时间
2018-6-24
在线时间
158 小时
发表于 2021-7-1 14:17:28 来自手机 | 显示全部楼层 |阅读模式
比如,定义个缓存u8 sendbuf;
sprinf((char*)sendbuf,"at+name=%s",999XYZ);   .......
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3369
金钱
3369
注册时间
2011-11-10
在线时间
207 小时
发表于 2021-7-1 15:03:45 | 显示全部楼层
使用时注意范围就行了。
回复 支持 反对

使用道具 举报

45

主题

267

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1101
金钱
1101
注册时间
2018-6-24
在线时间
158 小时
 楼主| 发表于 2021-7-1 15:36:10 来自手机 | 显示全部楼层
不可能注意,char是-128~127,定义的u8是0~255,怎么做好啊?
回复 支持 反对

使用道具 举报

45

主题

267

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1101
金钱
1101
注册时间
2018-6-24
在线时间
158 小时
 楼主| 发表于 2021-7-1 15:37:18 来自手机 | 显示全部楼层
难道要修改c
回复 支持 反对

使用道具 举报

45

主题

267

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1101
金钱
1101
注册时间
2018-6-24
在线时间
158 小时
 楼主| 发表于 2021-7-1 15:38:24 来自手机 | 显示全部楼层
难道要修改c库里的函数吗?这个不可想象
回复 支持 反对

使用道具 举报

11

主题

2147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4891
金钱
4891
注册时间
2015-1-10
在线时间
612 小时
发表于 2021-7-1 15:53:47 | 显示全部楼层
只是在进行数据处理的时候转换了,原数据并没有变啊,而且对于单片机来说都是2进制,char还是u8在存储上有区别吗
回复 支持 反对

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2021-7-1 15:59:40 | 显示全部楼层
u8 sendbuf;
sprinf((char*)sendbuf,"at+name=%s",999XYZ);   

C的编译器会这样理解你的代码
1, 由于sendbuf没赋值, 所以暂且当它会是0吧
2, (char*)sendbuf 这是告诉编译器, 把sendbuf的内容(==0)当为地址,然后把字符串放在此地址

这是你想要的结果?

应该是
u8 sendbuf[256];
回复 支持 反对

使用道具 举报

12

主题

3389

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8643
金钱
8643
注册时间
2020-5-11
在线时间
4098 小时
发表于 2021-7-1 16:38:29 | 显示全部楼层
本帖最后由 LcwSwust 于 2021-7-1 16:39 编辑

edmund1234说得对,想要把一串字符串处理后放入缓存,你得有一个数组作为缓存,还要注意不要越界,建议用snprintf
u8 sendbuf[256];
sprinf(sendbuf,"at+name=%s",999XYZ);


snprinf(sendbuf,255,"at+name=%s",999XYZ);

专治疑难杂症
回复 支持 反对

使用道具 举报

45

主题

267

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1101
金钱
1101
注册时间
2018-6-24
在线时间
158 小时
 楼主| 发表于 2021-7-1 19:22:36 | 显示全部楼层
试了试,只要999XYZ不是char 类型就行。buf呀,为消告警强制类型为char*都不是事。比如定义char 999XYZ[]={0x80},输出是fffff80,0x79就是0x79
回复 支持 反对

使用道具 举报

45

主题

267

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1101
金钱
1101
注册时间
2018-6-24
在线时间
158 小时
 楼主| 发表于 2021-7-1 20:06:24 | 显示全部楼层
我想只有最高是1就会开通另外的最高8位,推测64位是否输出ffffffffffffff80?
回复 支持 反对

使用道具 举报

12

主题

3389

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8643
金钱
8643
注册时间
2020-5-11
在线时间
4098 小时
发表于 2021-7-2 10:08:46 | 显示全部楼层
wdmvw 发表于 2021-7-1 19:22
试了试,只要999XYZ不是char 类型就行。buf呀,为消告警强制类型为char*都不是事。比如定义char 999XYZ[]={ ...

我感觉已经跟不上楼主的思路了
专治疑难杂症
回复 支持 反对

使用道具 举报

45

主题

267

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1101
金钱
1101
注册时间
2018-6-24
在线时间
158 小时
 楼主| 发表于 2021-7-2 17:18:36 | 显示全部楼层
没关系的,你按你的思路说就行了。反正我也有结论了。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-23 07:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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