二进制到没有库函数的十进制

时间:2014-09-04 17:32:34

标签: c arrays binary char

我必须编写一个C程序,它将二进制文件中的字符串读入一个字符数组,并打印出小数形式。

我几乎拥有它,但我有一个限制,因为我们不允许使用库函数 - 仅scanf()printf(),而不是rem

2 个答案:

答案 0 :(得分:1)

由于您正在寻找算法,因此这是一般性的想法:

使用fgets将数据读入char数组。确认它只有' 0'和' 1'字符。然后,从字符串的末尾开始,计算一个int或long或long long的总和(不知道你需要支持多少位)。要计算总和,请跟踪您所在的数字。每个数字都是二进制的,您应该知道如何从一个基数转换为另一个基数:

从字符串末尾的位置l=0开始。如果位置为l,则为l加上2为你的总和。然后,将一个添加到l,并在字符串中备份一个位置。重复,直到你在字符串的前面。通过这种方式,您可以将1位,2位,4位,8位等添加到小数结果中。

答案 1 :(得分:0)

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

int main(){
    char bits[32+1];
    uint32_t d=0;
    scanf("%32[01]", bits);
    for(int i=0;bits[i];++i){
        d <<= 1;
        if(bits[i]=='1')
            d |= 1;
    }
    printf("%" PRIu32 "\n", d);

    return 0;
}