我有十六進制值0x5a800000000b
,我試圖讓C中的printf語句將它打印到控制檯。C printf整數類型U32
到目前爲止,(因爲我用C沒用)我能得到「B」來打印,使用語法:
printf("Hex value%x\n", value);
的值存儲在一個整數類型U32,但在嘗試%llx,%lx的所有不同組合後,我只是不斷收到編譯器警告。
我猜我得到的printf語法錯了,但我似乎無法找到正確的%選項,有人可以幫我嗎?
感謝
我有十六進制值0x5a800000000b
,我試圖讓C中的printf語句將它打印到控制檯。C printf整數類型U32
到目前爲止,(因爲我用C沒用)我能得到「B」來打印,使用語法:
printf("Hex value%x\n", value);
的值存儲在一個整數類型U32,但在嘗試%llx,%lx的所有不同組合後,我只是不斷收到編譯器警告。
我猜我得到的printf語法錯了,但我似乎無法找到正確的%選項,有人可以幫我嗎?
感謝
這不是與printf
一個問題。
問題是一個32位變量不能保存值0x5a800000000b
。 32位只能保存8個十六進制數字:0x0000000b。因此輸出爲b
。
要存儲這麼大的值,應該使用64位變量。
long long value = 0x5a800000000bLL
還要注意在最後的雙重L
。它告訴編譯器該常量也是long long
。
然後您可以在printf
格式字符串中使用%llx
。
啊,是的,當然!我正在忙於printf,我忘了查看實際值有多大:)感謝Didier! – Tony
值0x5a800000000b多於32位,所以你必須使用long
。
long value = 0x5a800000000bl;
printf("Hex value%lx\n", value);
需要注意的是十六進制常量在l
應該結束。
有這些類型的一些預定義宏:
#include <inttypes.h>
int64_t PRId64. PRIi64
int32_t PRId32, PRIi32
int16_t PRId16, PRIi16
int8_t PRId8, PRIi8
例如:
printf("%"PRId32"\n", my32Int);
PRId62是錯字嗎? –
糟糕,應該是PRId64。謝謝! –
雖然這個問題是C,並且在C中使用inttypes宏沒有問題,但由於預處理器在C++中工作的方式,在這些宏和字符串文字之間包含空格可能是一種好的做法。如果沒有任何空格,預處理器將不會應用inttypes宏,因爲它會將其標識爲使用用戶定義的文字。 – bames53
您是否嘗試過'%ulx'或'%ullx'? – yiding