如何解决增加 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'
我不明白从'\06'到'\a'的变化!
有人能解释一下吗?我希望 Len 值只是增加 1,直到字符数组指针 s 命中 ',' 字符。
解决方法
这些值是正确的,但您的调试器将它们解释为 char
类型,而不是整数类型。
您可以看到 escape sequences used in C++ here(以及相应的 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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。