我有一个简单的程序:
#include <stdio.h>
int main()
{
long i = 16843009;
printf ("%02x \n" ,i);
}
我正在使用%02x
格式说明符来获取 2 个字符输出,但是,我得到的输出是:
1010101
虽然我期待它是:01010101
。
我有一个简单的程序:
#include <stdio.h>
int main()
{
long i = 16843009;
printf ("%02x \n" ,i);
}
我正在使用%02x
格式说明符来获取 2 个字符输出,但是,我得到的输出是:
1010101
虽然我期待它是:01010101
。
%02x
表示至少打印 2 位数字,0
如果少的话,在前面加上 's。0
在您的情况下,它是 7 位数字,因此您前面没有多余的数字。
此外,%x
是用于 int,但你有很长的时间。试试%08lx
吧。
%x
是格式化和输出十六进制值的格式说明符。如果您提供 int 或 long 值,它会将其转换为十六进制值。
%02x
意味着如果您提供的值小于两位数,那么0
将被预先设置。
您提供了值16843009
,并且它已转换为1010101
十六进制值。
您的字符串比格式宽度 2 宽。因此无需填充。
你实际上得到了正确的值。
您的x86
(兼容的)处理器存储这样的数据的方式是按照Little Endian顺序,这意味着 MSB 在您的输出中是最后一个。
因此,鉴于您的输出:
10101010
最后两个十六进制值10
是最高有效字节(2 hex digits = 1 byte = 8 bits
(用于(可能不必要的)澄清)。
因此,通过颠倒字节的内存存储顺序,您的值实际上是: 01010101
.
希望清除它!