%#08X
रूपांतरण के साथ मूल्य पूर्व में होना चाहिए 0X
; यह मानक द्वारा आवश्यक है। मानक में कोई सबूत नहीं है कि विनिर्देश #
के 08
हिस्से के व्यवहार को बदलना चाहिए सिवाय इसके कि 0X
उपसर्ग को लंबाई के हिस्से के रूप में गिना जाता है (इसलिए आप उपयोग करना चाहते हैं / उपयोग करने की आवश्यकता हो सकती है %#010X
। यदि, मेरी तरह, तो आप अपने हेक्स की तरह प्रस्तुत करते हैं। 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 मशीन पर, और मैक ओएस एक्स (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 की परिशुद्धता अच्छी तरह से काम करती है। .
न्यूनतम सटीकता (अंकों) को निर्दिष्ट करने के लिए संयुक्त , यह प्रारूपों को मज़बूती से संबोधित करता है। यदि आप 16 पर सटीक सेट करते हैं, तो मैक पर मेरे अनुभव में अतिरिक्त 4 अंक हमेशा 0 होते हैं, लेकिन पोर्टेबल 64-बिट कोड में 12 के बजाय 16 का उपयोग करने के लिए निश्चित रूप से एक मामला है (लेकिन आप 8 का उपयोग करेंगे) 32-बिट कोड)।
0x%.8X
? जो कि जीरो से लीड-फिल करेगा । (0x
यह सिर्फ एक प्रस्तावना है, लेकिन आपकी संभावना पहले से ही इसके बारे में पता है)।