[STM32G0] 无符号字符 = 128。在Cube IDE的调试控制台中查看这个值是-127

[复制链接]
 楼主| HomeKit 发表于 2025-7-25 03:09 | 显示全部楼层 |阅读模式
本帖最后由 HomeKit 于 2025-7-28 21:57 编辑

无符号字符 = 128。如果在Cube IDE的调试控制台中查看这个值是-127。刚开始创建了一个uint_8 value = 128,一切正常,我可以看到128。
现在变成了-127,我把uint8_t改成了char,一切又正常了,又成了128。

但现在,当我创建一个unsigned char = 128时,我又一次看到了-127。这是什么原因啊?

公羊子丹 发表于 2025-7-25 07:26 | 显示全部楼层
你是不是调试的时候把变量类型搞混了?看起来像是符号扩展搞的鬼。
周半梅 发表于 2025-7-25 07:27 | 显示全部楼层
我也遇到过类似的,调试窗口有时候把 unsigned char 当成 signed char 来显示了。
帛灿灿 发表于 2025-7-25 07:28 | 显示全部楼层
试试把变量显式打印出来看看?比如用 printf 打出来对比一下。
童雨竹 发表于 2025-7-25 07:29 | 显示全部楼层
G0 系列有些编译器默认 char 是 signed,要不你加个 cast 强制转下?
万图 发表于 2025-7-25 07:30 | 显示全部楼层
CubeIDE 的 watch 窗口有时候显示类型有点迷,右键改一下显示格式试试?
Wordsworth 发表于 2025-7-25 07:30 | 显示全部楼层
我一般都直接用 uint8_t,避免 char 的符号位麻烦。
Bblythe 发表于 2025-7-25 07:31 | 显示全部楼层
你这个描述挺典型的,估计编译器设置里 char 默认是 signed。
Pulitzer 发表于 2025-7-25 07:32 | 显示全部楼层
改成 unsigned char 再编译看看符号扩展还有没有?
Uriah 发表于 2025-7-25 07:33 | 显示全部楼层
也可以在编译选项里加个 –funsigned-char,强制默认 char 是 unsigned。
Clyde011 发表于 2025-7-25 07:34 | 显示全部楼层
有时候调试信息不准,实际 MCU 里的值还是对的,最好验证下内存里的原值。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

42

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

42

主题

42

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部