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

Convert a binary number from type short into a decimal number in C

我需要从一个文件中读取一个用 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;
}