Rumah  >  Artikel  >  pembangunan bahagian belakang  >  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
Mary-Kate Olsenasal
2024-11-21 11:05:16237semak imbas

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;

Gunakan:

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

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;

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

#define HEX( x )
   setw(2) << setfill('0') << hex << (int)( x )

Ini membolehkan anda mencetak nilai hex secara ringkas menggunakan:

cout << "a is " << HEX( a );

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;

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!

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