问题描述
我需要从文件中读取一个二进制数,该二进制数由 C 语言中的 short 类型表示。
数字代表数组的大小,所以在我阅读它之后,我想将该数字用作十进制值。
我试图将二进制数转换为十进制数,但我得到了错误的值。
例如:如果文件中的二进制数是 0000000000000101 ,十进制的大小应该是 5 但是当我使用“经典”二进制到十进制时,我得到的值为 17。
“经典”功能:
void main()
{
int num,binary_val,decimal_val = 0,base = 1,rem;
printf("Enter a binary number(1s and 0s) \n");
scanf("%d",&num);
binary_val = num;
while (num > 0)
{
rem = num % 10;
decimal_val = decimal_val + rem * base;
num = num / 10 ;
base = base * 2;
}
printf("The Binary number is = %d \n",binary_val);
printf("Its decimal equivalent is = %d \n",decimal_val);
}
当我只输入最后 3 个数字 (101) 时,我得到的值是 5,但是当我输入完整的数字 (0000000000000101) 时,我得到的是 17。
谢谢
解决方法
这个例子如你所愿。
#include <math.h>
#include <stdio.h>
int convert(long long n);
int main() {
long long n;
printf("Enter a binary number: ");
scanf("%lld",&n);
printf("%lld in binary = %d in decimal",n,convert(n));
return 0;
}
int convert(long long n) {
int dec = 0,i = 0,rem;
while (n != 0) {
rem = n % 10;
n /= 10;
dec += rem * pow(2,i);
++i;
}
return dec;
}