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