簡體   English   中英

如何正確打印數據類型的十六進制表示?

[英]how to print hex representation of a data type correctly?

我是 C 的新手,假設我想打印一個短整數:

short s = 0xbeef;
printf("This is 0x%x", s);

output 是0xffffbeef

看起來short有四個字節,但實際上short只有兩個字節,那為什么%x不能正確打印呢? 如果它有一個規則要求至少 4 字節表示,那么為什么 output 是0xffffbeef而不是0x0000beef

看起來 short 有四個字節,但實際上 short 只有兩個字節,那為什么 %x 不能正確打印呢?

不,這不是原因。 s的有符號值為 -16657。 當您將它傳遞給 printf 時,它被提升為int 提升值具有0xffffbeef的 32 位表示( Two's_complement 格式)。 這就是為什么你看到這個數字就像你想要的那樣 output unsigned integer not unsigned short。 https://godbolt.org/z/qKwzUv

使用正確的格式,一切都會好起來的......

來自https://en.cppreference.com/w/cpp/io/c/fprintf的好人創造了這張可愛的桌子:

現在檢查描述 x(和 X)格式的行。 找到無符號短 integer ,您可以在h列中找到它。 所以格式是%hx%hX

在此處輸入圖像描述 https://godbolt.org/z/wQCa9p

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM