我有一个简单的程序:
#include <stdio.h>
int main()
{
long i = 16843009;
printf ("%02x \n" ,i);
}
我使用%02x
格式说明符来获取2个char输出,
但是,我得到的输出是:
1010101
虽然我期待它:01010101
。
答案 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
。
希望能够解决它!