在C编程中,如何用左边的0填充二进制文件?
你们知道怎么在我的二进制文件左边填充0吗?我的职能是:在C编程中,如何用左边的0填充二进制文件?,c,binary,C,Binary,你们知道怎么在我的二进制文件左边填充0吗?我的职能是: void PrintBinaryUpTo(int n) { int i; char string [11]; for(i = 1; i <= n; i++) { itoa(i, string, 2); printf("%d in binary is: %s\n", i, string); } } 但我希望它是这样的: 1 in binary is: 00000
void PrintBinaryUpTo(int n)
{
int i;
char string [11];
for(i = 1; i <= n; i++)
{
itoa(i, string, 2);
printf("%d in binary is: %s\n", i, string);
}
}
但我希望它是这样的:
1 in binary is: 0000000001
2 in binary is: 0000000010
3 in binary is: 0000000011
编辑:我是这样做的,但我很确定有更聪明的方法
void PrintBinaryUpTo(int n)
{
int i;
char string [11];
char result[11];
for(i = 1; i <= n; i++)
{
itoa(i, string, 2);
switch(strlen(string))
{
case 1:
strcpy(result, "000000000");
strcat(result, string);
break;
case 2:
strcpy(result, "00000000");
strcat(result, string);
break;
case 3:
strcpy(result, "0000000");
strcat(result, string);
break;
case 4:
strcpy(result, "000000");
strcat(result, string);
break;
case 5:
strcpy(result, "00000");
strcat(result, string);
break;
case 6:
strcpy(result, "0000");
strcat(result, string);
break;
case 7:
strcpy(result, "000");
strcat(result, string);
break;
case 8:
strcpy(result, "00");
strcat(result, string);
break;
case 9:
strcpy(result, "0");
strcat(result, string);
break;
default:
strcpy(result, string);
break;
}
printf("%d in binary is: %s\n", i, result);
}
}
不,除非您定义自己的
itoa
函数,否则实际上没有任何方法可以做到这一点。但是,有一种便携式方法可以简化您的功能:
void PrintBinaryUpTo(int n)
{
int i;
char string[11];
char result[11];
char *zeroes = "000000000";
for(i = 1; i <= n; i++)
{
itoa(i, string, 2);
/* Buffer the number to 10 digits */
strcpy(result, zeroes+strlen(string)-1);
strcat(result, string);
printf("%d in binary is: %s\n", i, result);
}
}
“itoa”是C++@dash-o,我认为用户定义了自己的
itoa
@dash-o,它也是“标准C编程语言的一个广泛的非标准扩展。”“0到右边?”-或者在本例中是到左边(即“其他”右边)。strcat(结果,字符串)当目标不长于源时,code>会自找麻烦。根据Clang 11.0.0,在printf
格式字符串中,将标志0
与转换说明符s
组合在C11和C17中都是未定义的行为。生成的可执行文件似乎是零填充的,至少在我执行的非常少的测试运行中是这样。您可以执行printf(“%d二进制为:%s%s\n”,I,zeroes+strlen(string)-1,string),而不是strcpy
和strcat
)代码>是的,我知道有多种解决方案。我选择了建议最多的修复方案和最接近OP的解决方案。
1 in binary is: 0000000001
2 in binary is: 0000000010
3 in binary is: 0000000011
4 in binary is: 0000000100
5 in binary is: 0000000101
6 in binary is: 0000000110
7 in binary is: 0000000111
8 in binary is: 0000001000
9 in binary is: 0000001001
void PrintBinaryUpTo(int n)
{
int i;
char string[11];
char result[11];
char *zeroes = "000000000";
for(i = 1; i <= n; i++)
{
itoa(i, string, 2);
/* Buffer the number to 10 digits */
strcpy(result, zeroes+strlen(string)-1);
strcat(result, string);
printf("%d in binary is: %s\n", i, result);
}
}
void PrintBinaryUpTo(int n)
{
int i;
char string[11];
for(i = 1; i <= n; i++)
{
itoa(i, string, 2);
/* Buffer the number to 10 digits with %010s */
printf("%d in binary is: %010s\n", i, string);
}
}