uint8_t变量打印不正确

时间:2016-10-19 17:32:03

标签: c++

我试图读取一个uint8_t变量的小整数值(小于10)。我是这样做的

uint8_t myID = atoi(argv[5]);

但是当我这样做时

std::cout << "My ID is "<< myID <<std::endl;

它会打印一些非字母数字字符。当myID是int类型时没有问题。我尝试通过

明确地进行投射
uint8_t myID = (uint8_t)atoi(argv[5]);  

但结果是一样的。任何人都可以解释为什么会这样,如果有任何可能的解决方案?

2 个答案:

答案 0 :(得分:4)

uint8_t不是单独的数据类型。在提供它的系统上,实际类型是某些标准数据类型的别名,最常见的是unsigned char

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

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

Demo.

答案 1 :(得分:2)

这是因为在您的平台上,uint8_ttypedef的{​​{1}}。

ostream为unsigned char重载<<输出一个字符,而不是一个数字,因为聪明的C ++人认为这是明智的。通常是。

您可以通过转换为unsigned char来解决此问题,int始终可以接受uint8_t值。

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