我试图读取一个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]);
但结果是一样的。任何人都可以解释为什么会这样,如果有任何可能的解决方案?
答案 0 :(得分:4)
uint8_t
不是单独的数据类型。在提供它的系统上,实际类型是某些标准数据类型的别名,最常见的是unsigned char
。
运算符<<
提供了一个带unsigned char
的重载,并将其作为一个字符打印出来。当您将uint8_t
变量打印为int
时,请将其转换为int
进行打印:
std::cout << "My ID is "<< int(myID) <<std::endl;
// ^^^^^
答案 1 :(得分:2)
这是因为在您的平台上,uint8_t
是typedef
的{{1}}。
ostream为unsigned char
重载<<
输出一个字符,而不是一个数字,因为聪明的C ++人认为这是明智的。通常是。
您可以通过转换为unsigned char
来解决此问题,int
始终可以接受uint8_t
值。
(注意,在C ++ 14之前,char
可以是1的补码或带符号的8位有符号类型,因此它可能与uint8_t不同。