MATLAB二进制数组转换为十进制数组
MATLAB Cody : Problem43614 : Convert binary numbers array into array of decimal numbers.
Example
x=[ 11001000 ; 11001001 ; 11001010 ; 11001011 ; 11001100 ; 11001101 ; 11001110 ; 11001111 ; 11010000 ; 11010001 ; 11010010 ; 11010011 ; 11010100 ; 11010101 ; 11010110 ; 11010111 ; 11011000 ; 11011001 ; 11011010 ; 11011011 ; 11011100 ; 11011101 ; 11011110 ; 11011111 ; 11100000 ; 11100001 ; 11100010 ; 11100011 ; 11100100 ; 11100101 ; 11100110]
res= [ 200 ; 201 ; 202 ; 203 ; 204 ; 205 ; 206 ; 207 ; 208 ; 209 ; 210 ; 211 ; 212 213 ; 214 ; 215 ; 216 ; 217 ; 218 ; 219 ; 220 ; 221 ; 222 ; 223 ; 224 ; 225 ; 226 ; 227 ; 228 ; 229 ; 230]
function y = BinToDec(x)
y = sum((num2str(x)-'0').*2.^(size(num2str(x),2)-1:-1:0), 2);
end
- 输入是字符串形式的二进制数
x = ['11001000'; '11001001'; '11001010']; % 示例输入
res = bin2dec(x); % 转换为十进制
- 输入是数值型的二进制数
x = [11001000; 11001001; 11001010]; % 示例输入
res = bin2dec(num2str(x)); % 先转换为字符串再转换
- 对于大型数组的二进制数
x = ['11001000'; '11001001'; '11001010']; % 示例输入
res = sum((x-'0').*2.^(size(x,2)-1:-1:0), 2); % 向量化计算
二进制字符串数组到十进制的向量化转换:
x-'0':将字符数组转换为数值数组('0'→0,'1'→1)2.^(size(x,2)-1:-1:0):生成二进制位权向量(从最高位到最低位)- 点乘运算
.*:将每个二进制位与其对应的位权相乘 sum(..., 2):沿行方向求和,得到每个二进制串的十进制值例如输入3个8位二进制字符串时:
- 首先得到3×8的数值矩阵
- 与[128 64 32 16 8 4 2 1]位权矩阵相乘
- 每行求和得到[200; 201;
生成二进制位权向量的核心:2.^(size(x,2)-1:-1:0):生成二进制位权向量(从最高位到最低位):
size(x,2)获取输入矩阵x的列数(即二进制数的位数)size(x,2)-1:-1:0创建从最高位到最低位的倒序索引(如8位二进制生成[7 6 5 4 3 2 1 0])2.^对每个指数进行2的幂运算,得到对应的位权值
例如对于8位二进制数:
-
- 输入:
size(x,2)=8 - 生成序列:
7:-1:0→ [7 6 5 4 3 2 1 0] - 计算结果:
2.^[7 6 5 4 3 2 1 0]→ [128 64 32 16 8 4 2 1]
- 输入:

浙公网安备 33010602011771号