Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mencetak Pembolehubah 8-bit Tidak Ditandatangani dengan Betul dalam C?

Bagaimana untuk Mencetak Pembolehubah 8-bit Tidak Ditandatangani dengan Betul dalam C?

DDD
DDDasal
2024-11-11 01:13:03822semak imbas

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

Memanipulasi Pembolehubah 8-bit Tidak Bertanda dalam C

Apabila berurusan dengan pembolehubah 8-bit tidak bertanda dalam C , anda mungkin menghadapi cabaran apabila cuba untuk mencetaknya dengan betul menggunakan ostream. Secara lalai, ostream mentafsirkan pembolehubah ini sebagai char, yang membawa kepada output yang tidak diingini.

Memahami Isu

Unsigned char dan uint8_t ialah kedua-dua jenis data yang mewakili 8-bit unsigned integer . Walau bagaimanapun, dalam C , ostream secara automatik menganggap nilai ini sebagai aksara, mengakibatkan perwakilan hex yang salah. Coretan kod berikut menunjukkan isu:

unsigned char a = 0;
unsigned char b = 0xff;
cout << "a is " << hex << a << "; b is " << hex << b << endl;

Outputnya ialah:

a is ^@; b is 377

Daripada keluaran yang diingini:

a is 0; b is ff

Menyelesaikan Masalahnya

Untuk mencetak pembolehubah aksara yang tidak ditandatangani dengan betul sebagai hex, anda perlu untuk menghantarnya secara eksplisit ke int sebelum mencetaknya:

cout << "a is " << hex << (int) a << "; b is " << hex << (int) b << endl;

Ini akan menghasilkan output yang dimaksudkan:

a is 0; b is ff

Jika anda ingin mendahului sifar padding dalam output anda, anda boleh menggunakan yang berikut kod:

#include <iomanip>

//...

cout << "a is " << setw(2) << setfill('0') << hex << (int) a ;

Alternatif Penyelesaian

Penyelesaian MartinStettner menyediakan kaedah alternatif untuk menyelesaikan isu:

std::cout << std::hex << static_cast<unsigned int>(a);

Kaedah ini mengelakkan keperluan untuk pemutus eksplisit dan menyediakan penyelesaian yang lebih ringkas.

Atas ialah kandungan terperinci Bagaimana untuk Mencetak Pembolehubah 8-bit Tidak Ditandatangani dengan Betul dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn