使用Ostream 在C 中將無符號字元列印為十六進位
使用ostream 以十六進位列印無符號8位元變數(unsigned char 或uint8_t)在 C中,請考慮以下解決方案:
使用十六進位操縱器進行轉換
在使用十六進位操縱器之前,您可以使用強制轉換將unsigned char 轉換為int:
cout << "a is " << hex << (int)a << "; b is " << hex << (int)b << endl;
使用自訂操縱器
MartinStettner 提供了一個名為 hexchar的優雅自訂操縱器,它可以簡化十六進位列印:
#include <iostream> #include <iomanip> namespace std { template<> ostream& operator<<(ostream& os, unsigned char c) { return os << setbase(16) << setfill('0') << setw(2) << (unsigned int)c; } } using namespace std; int main() { unsigned char a = 0; unsigned char b = 0xff; cout << "a is " << hexchar << a << "; b is " << hexchar << b << endl; return 0; }
這將產生所需的輸出:
a is 00; b is ff
使用巨集(不太首選)
作為替代方案,您可以定義一個巨集來自動化這個過程,儘管這在以下情況下不太慣用C:
#define HEX(x) \ setw(2) << setfill('0') << hex << (unsigned int)(x) int main() { unsigned char a = 0; unsigned char b = 0xff; cout << "a is " << HEX(a) << "; b is " << HEX(b) << endl; return 0; }
以上是如何使用 Ostream 在 C 中將無符號字元列印為十六進位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!