2011-09-28 117 views
9

我有類似:爲什麼std :: cout不能爲我的int8_t號打印正確的值?

int8_t value; 
value = -27; 

std::cout << value << std::endl; 

當我運行我的程序,我得到輸出到屏幕的<E5>一個錯誤的隨機值,但是當我在gdb運行該程序並使用p value它打印出-27,這是正確的價值。有沒有人有任何想法?

+0

使用['的std :: COUT << + value'](HTTPS://計算器。 com/a/28414758/995714) –

回答

19

由於int8_t相同signed char,和char不被視爲一個數由流。投入到例如int16_t

std::cout << static_cast<int16_t>(value) << std::endl; 

你會得到正確的結果。

+1

因爲int16_t的類型可能不是一個整數(因爲流理解它),所以你可能應該用'int'。 –

2

這是因爲int8_t是的代名詞,簽名的 char。

因此,該值將顯示爲char值。

要強制INT顯示,你可以使用

std::cout << (int) 'a' << std::endl; 

這將工作,只要你不需要特殊的格式,例如

std::cout << std::hex << (int) 'a' << std::endl; 

在這種情況下,你會從加寬的尺寸得到的文物,特別是如果char值是負的(你會得到FFFFFFFF或FFFF 爲(int)(int8_t)-1代替FF)

編輯也看到這個非常可讀的書面記錄的是進入更多細節,並提供更多的策略與這個「交易」:http://blog.mezeske.com/?p=170


取決於體系結構和編譯

1

它看起來像是將值打印爲字符 - 如果使用'char value'相反,它打印相同的東西。 int8_t來自C標準庫,所以它可能是cout沒有爲它準備好(或者它只是對char進行typedefd)。

3

最有可能是int8_t

typedef char int8_t 

因此當使用流輸出的「價值」的基本類型(一個字符)被打印。

一個解決方案是得到一個 「整數」 是印在流之前中int8_t鍵入鑄造值:

std::cout << static_cast<int>(value) << std::endl; 
相關問題