在C中将Ascii转换为二进制

时间:2014-02-23 05:43:34

标签: c binary ascii

所以这是我的代码

void ascToBinary(int character, int *ones)
{
    if(character == 1)
    {
       printf("1");
       *ones+=1;
       return;
    }
    else
    {
        if((character%2) == 0)
        {
             printf("0");
             character = character/2;
        }
        else
        {
             printf("1");
             character = character/2;
             *ones+=1;

        }
        binaryPrinter(character, ones);
    }
}

任何人都可以尝试帮助我解决这里出了问题的地方。它编译得很好并且一些ascii字母是正确的。如果您尝试'e',它会打印出'1010011'而不是正确的二进制文件。

所有帮助表示感谢Guies。

3 个答案:

答案 0 :(得分:4)

您以错误的顺序打印结果。正确的输出是'1100101'。你可以像这样翻转它:

    void ascToBinary(int character, int *ones)
    {
        if(character == 1)
        {
           printf("1");
           *ones+=1;
           return;
        }
        else
        {
            char out;
            if((character%2) == 0)
            {
                 out = '0';
                 character = character/2;
            }
            else
            {
                 out = '1';
                 character = character/2;
                 *ones+=1;

            }
            ascToBinary(character, ones);
            putchar (out);
        }
    }

答案 1 :(得分:1)

您正在反向打印字符的位,因为您使用最低位开始打印。

因此,在e上调用时,您的函数的预期值为1010011,这正是您所获得的。

答案 2 :(得分:1)

整数转换为二进制

版本1 - 将打印出二进制结果

void to_bin(int value)
{
    char base_range[] = "01";

    if (value >= 2) {
        to_bin(value / 2);
    }

    printf("%c", base_range[value % 2]);
}

版本2 - 将返回包含二进制结果的字符串

void to_bin_str(int value, char *res, int *p)
{
    char base_range[] = "01";

    if (value >= 2) {
        to_bin_str(value / 2, res, p);
    }

    res[(*p)++] = base_range[value % 2];
}

char* convert(int value)
{
    char* result = (char*)malloc(sizeof(char) * 32);
    int i = 0;

    to_bin_str(value, result, &i);
    result[i] = '\0';

    return (result);
}

版本3 - 将转换为2到16之间的任何基数,处理基数为10的负数

void to_base(int value, int base, char *res, int *p)
{
    char base_range[] = "0123456789ABCDEF";

    if (value >= base || value <= -base) {
        to_base(value / base, base, res, p);
    }

    res[(*p)++] = base_range[abs(value % base)];
}

char* convert(int value, int base)
{
    char *result = (char*)malloc(sizeof(char) * 32);
    int i = 0;

    if (base < 2 || base > 16)
        return (NULL);

    if (base == 10 && value < 0)
        result[i++] = '-';

    to_base(value, base, result, &i);
    result[i] = '\0';

    return (result);
}