我必须编写一个C程序,它将二进制文件中的字符串读入一个字符数组,并打印出小数形式。
我几乎拥有它,但我有一个限制,因为我们不允许使用库函数 - 仅scanf()
和printf()
,而不是rem
。
答案 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;
}