2016-10-19 64 views
3

我想读取一个小整数值(小于10)到一个uint8_t变量。我不喜欢这样不正确的打印uint8_t变量

uint8_t myID = atoi(argv[5]); 

然而,当我这样做

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

它打印一些非字母数字字符。当myID是int类型时没有问题。我试着做明确的做法

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

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

回答

4

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

运营商<<提供了一个超载,它需要unsigned char,并将其打印为字符。当您打印您的uint8_t变量作为int,将其转换为int打印:

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

Demo.

2

这是因为在您的平台上,uint8_ttypedef对于unsigned char

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

您可以通过强制转换为int来解决此问题,该值始终能够接受uint8_t的值。 (请注意,在C++ 14之前,char可能是1的补码或带符号的8位有符号类型,所以它可能与uint8_t不同)。

+0

感谢。那么还有其他方式显示这个号码吗? –