首頁 >後端開發 >C++ >如何在 C 中正確列印無符號 8 位元變數?

如何在 C 中正確列印無符號 8 位元變數?

DDD
DDD原創
2024-11-11 01:13:03860瀏覽

How to Print Unsigned 8-bit Variables Correctly in C  ?

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn