Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah cara saya mencetak nilai aksara yang tidak ditandatangani sebagai perenambelasan dalam C menggunakan ostream?

Bagaimanakah cara saya mencetak nilai aksara yang tidak ditandatangani sebagai perenambelasan dalam C menggunakan ostream?

Mary-Kate Olsen
Lepaskan: 2024-11-21 11:05:16
asal
282 orang telah melayarinya

How do I print unsigned char values as hexadecimal in C   using ostream?

Mencetak Unsigned Char sebagai Hex Menggunakan Ostream dalam C

Dalam C , pengendalian pembolehubah 8-bit yang tidak ditandatangani boleh dilakukan menggunakan sama ada unsigned char atau uint8_t. Walau bagaimanapun, mencetak pembolehubah ini secara langsung menggunakan ostream mentafsirkannya sebagai aksara, membawa kepada hasil yang tidak diingini seperti yang diperhatikan apabila berurusan dengan nilai integer yang tidak ditandatangani.

Untuk memaparkan dengan tepat aksara tidak bertanda atau uint8_t sebagai nilai perenambelasan, anda perlu menghantarnya ke int sebelum menghantar mereka ke ostream. Contohnya, bukannya:

cout << "a is " << hex << a << "; b is " << hex << b << endl;
Salin selepas log masuk

Gunakan:

cout << "a is " << hex << (int) a << "; b is " << hex << (int) b << endl;
Salin selepas log masuk

Pendekatan ini memastikan bahawa data dianggap sebagai integer, menghasilkan perwakilan perenambelasan yang betul.

Jika anda ingin menambah padding dengan sifar pendahuluan, anda boleh memasukkan fail pengepala dan gunakan sintaks berikut:

cout << "a is " << setw(2) << setfill('0') << hex << (int) a;
Salin selepas log masuk

Selain itu, untuk memudahkan proses ini, anda boleh mencipta makro:

#define HEX( x )
   setw(2) << setfill('0') << hex << (int)( x )
Salin selepas log masuk

Ini membolehkan anda mencetak nilai hex secara ringkas menggunakan:

cout << "a is " << HEX( a );
Salin selepas log masuk

Walau bagaimanapun, adalah wajar mempertimbangkan pendekatan alternatif yang dicadangkan oleh MartinStettner, yang melibatkan penggunaan manipulator std::hex, menjadikan kod lebih mudah dibaca dan menghapuskan keperluan untuk menghantar:

cout << "a is " << std::hex << a << "; b is " << std::hex << b << endl;
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah cara saya mencetak nilai aksara yang tidak ditandatangani sebagai perenambelasan dalam C menggunakan ostream?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan