HomeKit 发表于 2025-7-25 03:09

无符号字符 = 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。这是什么原因啊?

公羊子丹 发表于 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 里的值还是对的,最好验证下内存里的原值。
页: [1]
查看完整版本: 无符号字符 = 128。在Cube IDE的调试控制台中查看这个值是-127