Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah cara saya mencetak nilai aksara yang tidak ditandatangani sebagai perenambelasan dalam C menggunakan ostream?
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 Selain itu, untuk memudahkan proses ini, anda boleh mencipta makro: Ini membolehkan anda mencetak nilai hex secara ringkas menggunakan: 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: 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!cout << "a is " << setw(2) << setfill('0') << hex << (int) a;
#define HEX( x )
setw(2) << setfill('0') << hex << (int)( x )
cout << "a is " << HEX( a );
cout << "a is " << std::hex << a << "; b is " << std::hex << b << endl;