【问题标题】:Converting Ascii to binary in C在 C 中将 Ascii 转换为二进制
【发布时间】:2014-03-24 18:05:37
【问题描述】:

这是我的代码

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”而不是正确的二进制文件。

感谢大家的帮助。

【问题讨论】:

  • 如果这里不清楚,我正在尝试将输入的字符转换为二进制。这是我通过递归函数大声做到这一点的唯一方法,并且这些参数必须是无效的。

标签: c binary ascii


【解决方案1】:

您以错误的顺序打印结果。正确的输出是“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);
        }
    }

【讨论】:

  • 我现在感觉很蠢 :( 哈哈,谢谢,我会接受你的回答
【解决方案2】:

您正在反向打印字符的位,因为您从最低有效位开始打印。

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

【讨论】:

    【解决方案3】:

    整数转换为二进制

    版本 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);
    }
    

    【讨论】:

      猜你喜欢
      • 2016-10-02
      • 2014-08-16
      • 1970-01-01
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      相关资源
      最近更新 更多