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
Lepaskan: 2024-11-11 01:13:03
asal
848 orang telah melayarinya

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;
Salin selepas log masuk

Outputnya ialah:

a is ^@; b is 377
Salin selepas log masuk

Daripada keluaran yang diingini:

a is 0; b is ff
Salin selepas log masuk
Salin selepas log masuk

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;
Salin selepas log masuk

Ini akan menghasilkan output yang dimaksudkan:

a is 0; b is ff
Salin selepas log masuk
Salin selepas log masuk

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 ;
Salin selepas log masuk

Alternatif Penyelesaian

Penyelesaian MartinStettner menyediakan kaedah alternatif untuk menyelesaikan isu:

std::cout << std::hex << static_cast<unsigned int>(a);
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan