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

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

DDD
發布: 2024-11-11 01:13:03
原創
867 人瀏覽過

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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板