การ%#08X
แปลงจะต้องนำหน้าค่าด้วย0X
; ที่เป็นที่ต้องการโดยมาตรฐาน ไม่มีหลักฐานในมาตรฐานที่#
ควรเปลี่ยนพฤติกรรมของ08
ส่วนของสเปคยกเว้นว่า0X
คำนำหน้านั้นนับเป็นส่วนหนึ่งของความยาว (ดังนั้นคุณอาจต้องการ / จำเป็นต้องใช้%#010X
ถ้าเช่นฉันคุณชอบ hex ของคุณแสดงเป็น0x1234CDEF
จากนั้นคุณต้องใช้0x%08X
เพื่อให้ได้ผลลัพธ์ที่ต้องการคุณสามารถใช้%#.8X
และควรใส่เลขศูนย์นำหน้าด้วย
ลองชุดรูปแบบในรหัสต่อไปนี้:
#include <stdio.h>
int main(void)
{
int j = 0;
printf("0x%.8X = %#08X = %#.8X = %#010x\n", j, j, j, j);
for (int i = 0; i < 8; i++)
{
j = (j << 4) | (i + 6);
printf("0x%.8X = %#08X = %#.8X = %#010x\n", j, j, j, j);
}
return(0);
}
บนเครื่อง RHEL 5 และบน Mac OS X (10.7.5) ผลลัพธ์คือ:
0x00000000 = 00000000 = 00000000 = 0000000000
0x00000006 = 0X000006 = 0X00000006 = 0x00000006
0x00000067 = 0X000067 = 0X00000067 = 0x00000067
0x00000678 = 0X000678 = 0X00000678 = 0x00000678
0x00006789 = 0X006789 = 0X00006789 = 0x00006789
0x0006789A = 0X06789A = 0X0006789A = 0x0006789a
0x006789AB = 0X6789AB = 0X006789AB = 0x006789ab
0x06789ABC = 0X6789ABC = 0X06789ABC = 0x06789abc
0x6789ABCD = 0X6789ABCD = 0X6789ABCD = 0x6789abcd
ฉันประหลาดใจเล็กน้อยที่การรักษา 0; ฉันไม่ชัดเจนว่าทำไม0X
คำนำหน้าถูกละเว้น แต่ด้วยระบบที่แยกกันสองระบบที่ทำมันจึงต้องเป็นมาตรฐาน มันยืนยันอคติของฉันกับ#
ตัวเลือก
การรักษาศูนย์เป็นไปตามมาตรฐาน
¶6ตัวละครธงและความหมายของพวกเขาคือ:
...
#
ผลลัพธ์จะถูกแปลงเป็น "รูปแบบอื่น" ... สำหรับการแปลงx
(หรือX
) ผลลัพธ์ที่ไม่ใช่ศูนย์มี0x
(หรือ0X
) นำหน้าด้วย ...
(เพิ่มการเน้น)
โปรดทราบว่าการใช้%#X
จะใช้ตัวอักษรพิมพ์ใหญ่สำหรับตัวเลขฐานสิบหกและ0X
เป็นคำนำหน้า การใช้%#x
จะใช้ตัวอักษรพิมพ์เล็กสำหรับตัวเลขฐานสิบหกและใช้0x
เป็นคำนำหน้า หากคุณต้องการ0x
เป็นตัวอักษรนำหน้าและตัวพิมพ์ใหญ่คุณต้องเขียนรหัส0x
แยกต่างหาก: 0x%X
. สามารถเพิ่มตัวดัดแปลงรูปแบบอื่น ๆ ได้ตามต้องการ
สำหรับที่อยู่การพิมพ์ให้ใช้<inttypes.h>
ส่วนหัวและuintptr_t
ประเภทและPRIXPTR
แมโครรูปแบบ:
#include <inttypes.h>
#include <stdio.h>
int main(void)
{
void *address = &address; // &address has type void ** but it converts to void *
printf("Address 0x%.12" PRIXPTR "\n", (uintptr_t)address);
return 0;
}
ตัวอย่างผลลัพธ์:
Address 0x7FFEE5B29428
เลือกพิษของคุณตามความยาว - ฉันพบว่าความแม่นยำ 12 ใช้ได้กับที่อยู่บน Mac ที่ใช้ macOS เมื่อรวมกับ.
เพื่อระบุความแม่นยำขั้นต่ำ (ตัวเลข) มันจะจัดรูปแบบที่อยู่ได้อย่างน่าเชื่อถือ หากคุณตั้งค่าความแม่นยำเป็น 16 ตัวเลข 4 หลักพิเศษนั้นจะเป็น 0 เสมอในประสบการณ์ของฉันบน Mac แต่มีกรณีที่ต้องใช้ 16 แทน 12 ในรหัส 64 บิตแบบพกพา (แต่คุณใช้ 8 สำหรับ รหัส 32 บิต)
0x%.8X
อะไร ที่จะนำไปสู่การเติมด้วยศูนย์ (0x
นี่เป็นเพียงคำนำ แต่คุณก็รู้อยู่แล้ว)