下面的代码打印ffffffffff。
我需要的输出是16位数的长度与前导零000000ffffffffff。var1和var2变量可以是不同的,所以我没有必要只填充6个零。我只需要输出到带有前导零的16位数字。我应该如何继续?
#include <stdio.h>
int main() {
int var1 = 1048575;
int var2 = 1048575;
char buffer[100];
sprintf(buffer, "%x%x", var1, var2);
printf("%s\n", buffer);
return 0;
}发布于 2016-01-10 17:33:08
您可以通过两个步骤完成此操作:
#include <stdio.h>
int main(void) {
int var1 = 1048575;
int var2 = 1048575;
int length = 0;
char buffer[100];
char paddedbuffer[100] = "000000000000000";
length = sprintf (buffer, "%x%x", var1, var2);
char* here = length < 16 ? paddedbuffer + 16 - length : paddedbuffer;
sprintf(here, "%s", buffer);
printf("%s\n", paddedbuffer);
return 0;
}在某些地方可能有更好的解决方案。
另一种可能是将结果转换为整数,并使用字段宽度对其进行sprintf,或者首先计算最右侧数字的实际位数。
发布于 2016-01-10 17:52:29
#include <stdio.h>
int main ()
{
int var1=1048575;
int var2=1048575;
char buffer [17];
char zeros [] = "0000000000000000";
sprintf (buffer, "%x%x", var1, var2);
// Put the zeros in front
int len = strlen(buffer);
if (len < 16)
{
zeros[16-len] = 0x0; // Terminate the string at 16-len
}
else
{
zeros[0] = 0x0; // Terminate the string at 0 as no extra zero is needed
}
printf("%s%s\n", zeros, buffer);
return 0;
}发布于 2017-07-14 05:24:26
这是一个没有中间缓冲区的简单解决方案:
#include <stdio.h>
int main(void) {
int var1 = 1048575;
int var2 = 1048575;
printf("%0*x%x\n", 16 - snprintf(NULL, 0, "%x", var2), var1, var2);
return 0;
}有一种特殊的情况,您可能想要定义确切的行为:如果var2 == 0呢?上面的代码将打印一个尾随的0。如果只想打印有效数字,因此没有零值的数字,则可以按以下方式修改语句:
printf("%0*x%x\n", 16 - snprintf(NULL, 0, "%.x", var2), var1, var2);一个小区别:在%和x之间添加一个.,以指定精度字段0,并将最小位数指定为none。
https://stackoverflow.com/questions/34703806
复制相似问题