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!