c语言中二进制转化成十进制

img


我利用这个函数想把二进制转化成十进制,但是会报错,并且运行速度变慢,我的二进制数是放在一个数组中的

img

img

img

将ten_change的函数定义修改如下:
ten_change(int l,int *x)
然后在调用的时候修改为ten_change(8,x1);

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7596878
  • 你也可以参考下这篇文章:用C实现输入十进制数转换为二进制数后,计数二进制数中1的个数
  • 除此之外, 这篇博客: C语言中关于数组指针与指针数组,二维指针二维数组、函数指针的总结中的 函数指针 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 1.函数指针是指针、指向函数的指针,函数名是执行函数体的入口地址,可以通过函数类型定义函数指针:
    FuncType* pointer;也可以直接定义:type(*pointer)(参数列表);
    其中:pointer为函数指针变量名,type为所指函数返回值类型。

    2.函数有自己特定的类型,函数的类型由返回值、参数类型和参数个数共同决定。如:
    int add(int i, int i)类型为int(int,int); 可以通过typedef为函数类型重命名:
    typedef type name(参数列表); 例: typedef int f(int, int); typedef void p(int);

    3.回调函数是利用函数指针实现的一种调用机制,函数指针是实现回调机制的关键技术;
    回调机制原理:
    调用者不知道具体事件发生时需要调用的具体函数;
    被调函数不知道何时被调用,只只读需要完成的任务;
    当具体事件发生时,调用者通过函数指针调用具体函数;
    回调机制中的调用者和被调函数互不依赖!

  • 您还可以看一下 吴健老师的c语言指针精讲---讲师指导一步到位课程中的 二级指针的用法小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    在C语言中将二进制转换为十进制的解决方案:

    1. 定义一个函数,接收二进制数的数组和数组长度作为参数,返回十进制数。
    int bin2dec(int bin[], int len){
        int dec = 0, i;
        for(i = 0; i < len; i++){
            dec = dec * 2 + bin[i];
        }
        return dec;
    }
    
    1. 在主函数中定义二进制数组,调用上述函数进行转换并输出结果。
    int main(){
        int bin[] = {1, 0, 1, 1, 0, 1, 0, 1}; // 二进制数为 10110101
        int len = sizeof(bin) / sizeof(bin[0]);
        int dec = bin2dec(bin, len);
        printf("%d\n", dec); // 输出 181,即该二进制数的十进制表示
        return 0;
    }
    

    解释:上述函数中使用了二进制转换的定义方法:将二进制数的每一位从最高位到最低位依次乘上 $2$ 的次幂,再求和得到十进制数。

    同时,我们在主函数中通过 sizeof 操作符获得了二进制数组的长度,避免了手动设置数组长度带来的繁琐操作。