C99 printf中的变量前导零
我正在用C99编写一个多精度库。根据编译代码的平台,我选择了不同的表示基础 例如,假设在平台X上,系统选择BASE=100;平台上Y底座=10000 假设我表示大的无符号int,如下所示:C99 printf中的变量前导零,c,printf,C,Printf,我正在用C99编写一个多精度库。根据编译代码的平台,我选择了不同的表示基础 例如,假设在平台X上,系统选择BASE=100;平台上Y底座=10000 假设我表示大的无符号int,如下所示: typedef结构a{ 足够大的单位*位数; 无符号整数长度; 最后一个无符号整数; }bigUint; 所以,当我使用BASE-100系统时,我希望我的打印功能 在BASE-100表示法中,数字数组为(小端形式): 在BASE-10000中: 12|3456|2|6789 ^ I wan
typedef结构a{
足够大的单位*位数;
无符号整数长度;
最后一个无符号整数;
}bigUint;
所以,当我使用BASE-100系统时,我希望我的打印功能
在BASE-100表示法中,数字数组为(小端形式):
在BASE-10000中:
12|3456|2|6789
^ I want THREE LEADING ZEROES
有简单的方法吗?阅读
*
中的字段宽度占位符man printf
printf("%0*d", 3, 42);
给予
042
及
给予
alk
谢谢,这正是我想要的。我实际做的是定义一个宏,类似于LOG10_BASE,并在printf中使用它,就像你建议的那样printf(“%0*d”,LOG10_BASE,a->digits[0])代码>请注意,C标准和POSIX都不要求使用带字符串的空格修饰符(严格来说,行为是未定义的);它使用有符号和无符号数字定义其行为。您还可以使用printf(“%d”,3,42)
打印042
;C99标准的基本原理表明委员会倾向于此(尽管0
修饰符也适用)。
12|3456|2|6789
^ I want THREE LEADING ZEROES
printf("%0*d", 3, 42);
042
printf("% *s", 42, "alk");
<39 spaces>alk