我有以下C代码,使用sprintf函数将两个长整数值转换为两个十六进制字符串:
void reverse_and_encode(FILE *fpt, long *src, long *dst) {
char reversed_src[5], reversed_dst[5];
sprintf(reversed_src, "%x", *dst);
sprintf(reversed_dst, "%x", *src);
printf("Reversed Source: %sn", reversed_src);
printf("Reversed Destination: %sn", reversed_dst);
}
但是当我打印十六进制值字符串时,我无法在输出中获得前导零。如:
Reversed Source: f168 // for integer 61800
Reversed Destination: 1bb // This output should be "01bb" for integer 443
使用
sprintf(reversed_src, "%04x", ( unsigned int )*dst);
一般情况下,如果表达式2 * sizeof( long )
(十六进制位数)可以等于8或16,请注意。对于long类型的对象。你需要像
char reversed_src[2 * sizeof( long ) + 1], reversed_dst[2 * sizeof( long ) + 2];
,然后写
sprintf(reversed_src, "%0*lx",
( int )( 2 * sizeof( long ) ), ( unsigned long )*dst);
这是一个示范程序。
#include <stdio.h>
int main(void)
{
enum { N = 2 * sizeof( long ) };
char reversed_src [N + 1];
long x = 0xABCDEF;
sprintf( reversed_src, "%0*lX", N, ( unsigned long )x );
puts( reversed_src );
return 0;
}
程序输出为
0000000000ABCDEF