在C 中操作無符號8 位元變數
在C 處理無符號8 位元變數時,您可能會遇到挑戰使用ostream 正確列印它們。預設情況下,ostream 將這些變數解釋為 char,從而導致意外輸出。
理解問題
Unsigned char 和 uint8_t 都是表示 8 位元無符號整數的資料型態。但是,在 C 中, ostream 會自動將這些值視為字符,從而導致不正確的十六進位表示。以下程式碼片段示範了這個問題:
unsigned char a = 0; unsigned char b = 0xff; cout << "a is " << hex << a << "; b is " << hex << b << endl;
輸出將是:
a is ^@; b is 377
而不是所需的輸出:
a is 0; b is ff
解決問題
要正確地將unsigned char 變數列印為十六進制,您需要在列印之前將它們明確轉換為int:
cout << "a is " << hex << (int) a << "; b is " << hex << (int) b << endl;
這將產生預期的輸出:
a is 0; b is ff
如果您希望在輸出中進行前導零填充,您可以使用以下命令代碼:
#include <iomanip> //... cout << "a is " << setw(2) << setfill('0') << hex << (int) a ;
替代解決方案
MartinStettner 的解決方案提供了一種替代方法來解決該問題:
std::cout << std::hex << static_cast<unsigned int>(a);
此方法避免了顯式轉換的需要,並提供了更簡潔的解決方案。
以上是如何在 C 中正確列印無符號 8 位元變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!