我有類似:爲什麼std :: cout不能爲我的int8_t號打印正確的值?
int8_t value;
value = -27;
std::cout << value << std::endl;
當我運行我的程序,我得到輸出到屏幕的<E5>
一個錯誤的隨機值,但是當我在gdb運行該程序並使用p value
它打印出-27,這是正確的價值。有沒有人有任何想法?
我有類似:爲什麼std :: cout不能爲我的int8_t號打印正確的值?
int8_t value;
value = -27;
std::cout << value << std::endl;
當我運行我的程序,我得到輸出到屏幕的<E5>
一個錯誤的隨機值,但是當我在gdb運行該程序並使用p value
它打印出-27,這是正確的價值。有沒有人有任何想法?
由於int8_t
相同signed char
,和char
不被視爲一個數由流。投入到例如int16_t
std::cout << static_cast<int16_t>(value) << std::endl;
你會得到正確的結果。
因爲int16_t的類型可能不是一個整數(因爲流理解它),所以你可能應該用'int'。 –
這是因爲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
取決於體系結構和編譯
它看起來像是將值打印爲字符 - 如果使用'char value'相反,它打印相同的東西。 int8_t來自C標準庫,所以它可能是cout沒有爲它準備好(或者它只是對char進行typedefd)。
最有可能是int8_t
typedef char int8_t
因此當使用流輸出的「價值」的基本類型(一個字符)被打印。
一個解決方案是得到一個 「整數」 是印在流之前中int8_t鍵入鑄造值:
std::cout << static_cast<int>(value) << std::endl;
使用['的std :: COUT << + value'](HTTPS://計算器。 com/a/28414758/995714) –