格式说明符%02x

时间:2013-08-26 07:35:26

标签: c printf format-specifiers

我有一个简单的程序:

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

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

1010101 

虽然我期待它:01010101

4 个答案:

答案 0 :(得分:42)

%02x表示打印至少2位数字,如果少于0,则前缀为0。在你的情况下它是7位数,所以你前面没有额外的%x

此外,%08lx适用于int,但您有一个很长的时间。请改为{{1}}。

答案 1 :(得分:3)

%x是格式说明符,用于格式化并输出十六进制值。如果要提供int或long值,则会将其转换为十六进制值。

%02x表示如果您提供的值少于两位数,则前置0。

您提供的值为16843009,已转换为1010101,其值为十六进制值。

答案 2 :(得分:2)

你的字符串比格式宽度2宽。所以没有填充。

答案 3 :(得分:-1)

您实际上是在获得正确的价值。

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

所以,鉴于你的输出:

  

10101010

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

因此,通过反转字节的内存存储顺序,您的值实际为:01010101

希望能够解决它!