ฉันต้องการทำ:
int a = 255;
cout << a;
และให้มันแสดง FF ในผลลัพธ์ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันต้องการทำ:
int a = 255;
cout << a;
และให้มันแสดง FF ในผลลัพธ์ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
ใช้:
#include <iostream>
...
std::cout << std::hex << a;
มีตัวเลือกอื่น ๆ อีกมากมายเพื่อควบคุมการจัดรูปแบบที่แน่นอนของหมายเลขเอาต์พุตเช่นศูนย์นำหน้าและตัวพิมพ์ใหญ่ / ตัวพิมพ์เล็ก
ios::fmtflags f(cout.flags());
out.flags(f);
std::cout.flags(f);
std::hex
ถูกกำหนดไว้ในที่มีอยู่โดย<ios>
<iostream>
แต่การใช้สิ่งต่าง ๆ เช่นstd::setprecision/std::setw/std::setfill
/ etc คุณต้องรวม<iomanip>
ไว้ด้วย
หากต้องการจัดการกระแสข้อมูลให้พิมพ์เป็นเลขฐานสิบหกให้ใช้เครื่องมือhex
ปรับแต่ง:
cout << hex << a;
โดยดีฟอลต์อักขระเลขฐานสิบหกจะถูกส่งออกเป็นตัวพิมพ์เล็ก หากต้องการเปลี่ยนเป็นตัวพิมพ์ใหญ่ให้ใช้ตัวuppercase
จัดการ:
cout << hex << uppercase << a;
หากต้องการเปลี่ยนเอาต์พุตกลับเป็นตัวพิมพ์เล็กในภายหลังให้ใช้เครื่องมือnouppercase
ปรับแต่ง:
cout << nouppercase << b;
nouppercase
จะเปลี่ยนกลับมาส่งออกไปยังทศนิยม?
หากคุณต้องการพิมพ์เลขฐานสิบหกเดียวแล้วเปลี่ยนกลับเป็นทศนิยมคุณสามารถใช้สิ่งนี้:
std::cout << std::hex << num << std::dec << std::endl;
ฉันเข้าใจว่านี่ไม่ใช่สิ่งที่ OP ร้องขอ แต่ฉันก็ยังคิดว่ามันคุ้มค่าที่จะชี้ให้เห็นว่าต้องทำอย่างไรกับ printf ฉันมักจะชอบใช้มันมากกว่า std :: cout (แม้จะไม่มีพื้นหลัง C ก่อนหน้า)
printf("%.2X", a);
'2' กำหนดความแม่นยำ 'X' หรือ 'x' กำหนดกรณีและปัญหา
printf("hello\n")
fprintf(stdout, "hello\n")
มีประโยชน์มากขึ้นคุณสามารถส่งstdout
(หรือstdin
หรือstderr
) ไปยังฟังก์ชันที่รับFILE*
อาร์กิวเมนต์ได้
มีธงและหน้ากากหลายแบบที่คุณสามารถใช้ได้เช่นกัน โปรดดูhttp://www.cplusplus.com/reference/iostream/ios_base/setf/สำหรับข้อมูลเพิ่มเติม
#include <iostream>
using namespace std;
int main()
{
int num = 255;
cout.setf(ios::hex, ios::basefield);
cout << "Hex: " << num << endl;
cout.unsetf(ios::hex);
cout << "Original format: " << num << endl;
return 0;
}
std::hex
ทำให้คุณได้รับการจัดรูปแบบเลขฐานสิบหก แต่เป็นตัวเลือก stateful หมายถึงคุณต้องบันทึกและเรียกคืนสถานะมิฉะนั้นจะส่งผลกระทบต่อผลลัพธ์ในอนาคตทั้งหมด
การสลับกลับอย่างไร้เดียงสาstd::dec
เป็นสิ่งที่ดีถ้านั่นคือสิ่งที่เคยมีมาก่อนซึ่งอาจไม่เป็นเช่นนั้นโดยเฉพาะอย่างยิ่งถ้าคุณกำลังเขียนห้องสมุด
#include <iostream>
#include <ios>
...
std::ios_base::fmtflags f( cout.flags() ); // save flags state
std::cout << std::hex << a;
cout.flags( f ); // restore flags state
ใช้std::uppercase
และstd::hex
เพื่อจัดรูปแบบตัวแปรจำนวนเต็มที่a
จะแสดงในรูปแบบเลขฐานสิบหก
#include <iostream>
int main() {
int a = 255;
// Formatting Integer
std::cout << std::uppercase << std::hex << a << std::endl; // Output: FF
std::cout << std::showbase << std::hex << a << std::endl; // Output: 0XFF
std::cout << std::nouppercase << std::showbase << std::hex << a << std::endl; // Output: 0xff
return 0;
}
cout << hex << a << dec;
ให้มันเปลี่ยนกลับ