我有类似的东西:
int8_t value;
value = -27;
std::cout << value << std::endl;
当我运行我的程序时,我得到一个错误的随机值<E5>
输出到屏幕,但是当我在gdb中运行程序并使用p value
时,它打印出-27,这是正确的值。有没有人有任何想法?
答案 0 :(得分:21)
由于int8_t
与signed char
相同,因此流不会将char
视为数字。投入到例如int16_t
std::cout << static_cast<int16_t>(value) << std::endl;
你会得到正确的结果。
答案 1 :(得分:3)
最有可能是int8_t
typedef char int8_t
因此,当您使用stream out“value”时,将打印基础类型(char)。
打印“整数”的一个解决方案是在流式传输int8_t之前键入强制转换值:
std::cout << static_cast<int>(value) << std::endl;
答案 2 :(得分:2)
这是因为int8_t与 signed char。
同义因此该值将显示为char值。
要强制显示,您可以使用
std::cout << (int) 'a' << std::endl;
这将有效,只要您不需要特殊格式,例如
std::cout << std::hex << (int) 'a' << std::endl;
在这种情况下,您将从扩大的大小中获取工件,特别是如果char值为负(对于(int)(int8_t)-1
而不是FF,您将获得FFFFFFFF或FFFF 1 )< / p>
编辑另请参阅这篇非常易读的文章,该文章详细介绍并提供了更多与此相关的策略:http://blog.mezeske.com/?p=170
<子> 1 取决于架构和编译器 子>
答案 3 :(得分:1)
看起来它正在将值打印为字符 - 如果使用'char value;'相反,它打印相同的东西。 int8_t来自C标准库,因此可能是cout没有为它做好准备(或者它只是对char的typedefd)。