2010-08-24 46 views

回答

2
long long unsigned n = 0x000000000076fba1; 
printf("%0x0.16llx\n", n); 
+1

您是不是要找的printf( 「0X%016llx \ N」,N)? – joast 2010-08-24 14:04:25

+0

嗯,我現在寫了,但是在閱讀這個案例的文檔之後,它們幾乎一樣 – 2010-08-24 14:07:21

+0

是的,任何一個人都可以在這種情況下工作。 注意:如果您使用Windows,則可能必須使用類似printf(「%0x016I64 \ n」,n)的內容。我不記得MS何時增加了對「ll」作爲格式說明符的支持。 – joast 2010-08-24 14:14:23

0
#ifdef __int64 
printf("%#018I64x\n", n); /* for MSVC+MinGW */ 
#else 
printf("%#018llx\n", n); /* other compiler with "unsigned long long" support */ 
#endif 
+0

在格式中使用「#」有幾個問題。您需要考慮添加到輸出的「0x」,因此您需要使用18而不是16的寬度。另外,如果沒有前導「0x」,則輸出0(零)值(如果寬度爲16,則輸出爲「0000000000000000」)。 – joast 2010-08-24 16:48:34

+0

你是對的,我正確的16 - > 18 – user411313 2010-08-24 17:31:11

+1

不要使用寬度,使用精度。 '「%#。16」PRIu64「x \ n」'。特別是不要用這種可怕的'#ifdef'廢話亂拋垃圾的代碼。 – 2010-08-24 23:57:44