我有一个简单的程序:
#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.
希望清除它!