在C编程中,如何用左边的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

你们知道怎么在我的二进制文件左边填充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: 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(结果,字符串)会自找麻烦。根据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);
    }
}