无符号字符 = 128。在Cube IDE的调试控制台中查看这个值是-127
本帖最后由 HomeKit 于 2025-7-28 21:57 编辑无符号字符 = 128。如果在Cube IDE的调试控制台中查看这个值是-127。刚开始创建了一个uint_8 value = 128,一切正常,我可以看到128。现在变成了-127,我把uint8_t改成了char,一切又正常了,又成了128。
但现在,当我创建一个unsigned char = 128时,我又一次看到了-127。这是什么原因啊?
你是不是调试的时候把变量类型搞混了?看起来像是符号扩展搞的鬼。 我也遇到过类似的,调试窗口有时候把 unsigned char 当成 signed char 来显示了。 试试把变量显式打印出来看看?比如用 printf 打出来对比一下。 G0 系列有些编译器默认 char 是 signed,要不你加个 cast 强制转下? CubeIDE 的 watch 窗口有时候显示类型有点迷,右键改一下显示格式试试? 我一般都直接用 uint8_t,避免 char 的符号位麻烦。 你这个描述挺典型的,估计编译器设置里 char 默认是 signed。 改成 unsigned char 再编译看看符号扩展还有没有? 也可以在编译选项里加个 –funsigned-char,强制默认 char 是 unsigned。 有时候调试信息不准,实际 MCU 里的值还是对的,最好验证下内存里的原值。
页:
[1]