在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
相关产品推荐
相关产品推荐

