39

我有一个简单的程序:

#include <stdio.h>
int main()
{
        long i = 16843009;
        printf ("%02x \n" ,i);
}

我正在使用%02x格式说明符来获取 2 个字符输出,但是,我得到的输出是:

1010101 

虽然我期待它是:01010101

4

4 回答 4

53

%02x表示至少打印 2 位数字,0如果少的话,在前面加上 's。0在您的情况下,它是 7 位数字,因此您前面没有多余的数字。

此外,%x是用于 int,但你有很长的时间。试试%08lx吧。

于 2013-08-26T07:38:08.517 回答
10

%x是格式化和输出十六进制值的格式说明符。如果您提供 int 或 long 值,它会将其转换为十六进制值。

%02x意味着如果您提供的值小于两位数,那么0将被预先设置。

您提供了值16843009,并且它已转换为1010101十六进制值。

于 2017-11-03T06:13:24.683 回答
3

您的字符串比格式宽度 2 宽。因此无需填充。

于 2013-08-26T07:37:17.007 回答
-2

你实际上得到了正确的值。

您的x86(兼容的)处理器存储这样的数据的方式是按照Little Endian顺序,这意味着 MSB 在您的输出中是最后一个。

因此,鉴于您的输出:

10101010

最后两个十六进制值10是最高有效字节(2 hex digits = 1 byte = 8 bits(用于(可能不必要的)澄清)。

因此,通过颠倒字节的内存存储顺序,您的值实际上是: 01010101.

希望清除它!

于 2016-02-19T18:24:58.637 回答