首页 > 解决方案 > 增加一个 uint8_t 变量,奇怪的结果

问题描述

在 C++ 类中,我有以下代码/while 循环:

uint8_t len = 0;

while (*s != ',') {
    len = (uint8_t)(len + 1u);
    ++s;
}
return (len);

结果应该是介于 0 和最大 20 之间的值。当我收到一个奇怪的结果时,并开始调试。当我逐步执行此操作时,我得到了变量 Len 的以下值:

'\01'、'\02'、'\03'、'\04'、'\05'、'\06'、'\a'、'\b'、'\t'</p>

我不明白从 '\06' 到 '\a' 的变化!

有人可以解释一下吗?我希望 Len 值简单地增加 1,直到字符数组指针 s 碰到 ',' 字符。

标签: c++

解决方案


这些值是正确的,但您的调试器将它们解释为char类型,而不是整数类型。

您可以在此处查看 C++ 中使用的转义序列(以及 ASCII 中的相应值)。

\01- 八进制的 1,十进制的 1
\02- 八进制的 2,十进制的 2
...
\06- 八进制的 6,十进制的 6
\a- 相当于\07,使用计算机铃声的 ASCII 码
\b- 相当于\010(八进制 10,十进制 8), “退格”字符的 ASCII 代码
\t- 相当于\011(八进制 11,十进制 9),制表符的 ASCII 代码
等。

我不知道您是否可以更改调试器解释数据的方式。最坏的情况是,您始终可以在将其转换为int.

(gdb)p static_cast<int>(len)

推荐阅读