在 C 中将二进制类型从 short 类型转换为十进制数

问题描述

我需要从文件中读取一个二进制数,该二进制数由 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;
}