You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C语言中如何将二进制数组转十进制数?求助处理bin[8]={10,00,00,10}转130

解决二进制数组转十进制(得到130)的C语言实现方法

首先得确认下你的需求:你提到的bin[8] = {10,00,00,10}应该是把8位二进制数10000010拆成了四个两位的分组(大概率是笔误写成了bin[8],实际应该是长度为4的数组),这个8位二进制对应的十进制正好是130,和你想要的结果一致。下面我给你几种常见场景下的C语言实现方法:

场景1:数组存储两位二进制字符串

如果你的数组里每个元素是"10"、"00"这类两位二进制字符串,可以用字符串拼接+逐位转换的方式:

#include <stdio.h>
#include <string.h>

int main() {
    // 存储两位二进制字符串的数组
    char bin[4][3] = {"10", "00", "00", "10"};
    char full_binary[9] = {0}; // 用来拼接成完整的8位二进制字符串
    int decimal = 0;

    // 拼接所有两位片段成完整的8位二进制字符串
    for (int i = 0; i < 4; i++) {
        strcat(full_binary, bin[i]);
    }

    // 将二进制字符串转为十进制
    for (int i = 0; full_binary[i] != '\0'; i++) {
        decimal = decimal * 2 + (full_binary[i] - '0');
    }

    printf("十进制结果:%d\n", decimal); // 输出130
    return 0;
}

场景2:数组存储整数形式的两位二进制值

如果你的数组里是整数(比如10代表二进制10,0代表二进制00),用位运算计算效率更高:

#include <stdio.h>

int main() {
    // 整数数组,每个元素对应两位二进制值
    int bin[4] = {10, 0, 0, 10};
    int decimal = 0;

    // 遍历数组,把每个两位值左移到对应位置后累加
    for (int i = 0; i < 4; i++) {
        // 第一个元素左移6位,第二个左移4位,以此类推
        decimal |= (bin[i] << ((3 - i) * 2));
    }

    printf("十进制结果:%d\n", decimal); // 输出130
    return 0;
}

补充:如果数组是8个单独的二进制位

要是你实际的数组是8个单独的二进制位(比如{1,0,0,0,0,0,1,0}),代码会更简洁:

#include <stdio.h>

int main() {
    int bin[8] = {1,0,0,0,0,0,1,0};
    int decimal = 0;

    for (int i = 0; i < 8; i++) {
        decimal = decimal * 2 + bin[i];
    }

    printf("十进制结果:%d\n", decimal); // 输出130
    return 0;
}

顺便说下为什么10000010等于130:从左到右的8位二进制权重是27到20,计算下来就是1*128 + 0*64 + 0*32 + 0*16 + 0*8 + 0*4 + 1*2 + 0*1 = 130。

内容的提问来源于stack exchange,提问作者user0712

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:21:43