不正确打印uint8_t变量

3

我正在尝试将一个小整数值(小于10)读入到uint8_t变量中。我这样做:

uint8_t myID = atoi(argv[5]);

然而当我这样做时
std::cout << "My ID is "<< myID <<std::endl;

当myID为整数类型时,程序可以正常运行。但是,当myID不是字母数字字符时,程序会打印出一些非字母数字的字符。我尝试过将其强制转换为int类型,但问题仍旧存在。

uint8_t myID = (uint8_t)atoi(argv[5]);  

但结果却是一样的。是否有人能够解释为什么会出现这种情况,以及是否存在任何可能的解决方案?
2个回答

4

uint8_t并不是一种单独的数据类型。在提供它的系统上,实际类型被重命名为某些标准数据类型,最常见的是unsigned char

运算符<<提供了一个重载,接受unsigned char,并将其作为字符打印出来。当你将你的uint8_t变量作为int进行打印时,请将其转换为int进行打印:

std::cout << "My ID is "<< int(myID) <<std::endl;
//                         ^^^^^

演示。


2

这是因为在您的平台上,uint8_t 是一个 unsigned chartypedef

而 ostream 重载的 << 对于 unsigned char 输出的是字符而不是数字,因为聪明的 C++ 开发人员认为这是合理的。通常确实如此。

您可以通过将其强制转换为 int 来解决此问题,这样就可以始终接受 uint8_t 值。

(请注意,在 C++14 之前,char 可能是 1 的补码或有符号幅度 8 位有符号类型,因此可能与 uint8_t 不同)。


谢谢。那么还有其他显示数字的方法吗? - Aswin Suresh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接