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); % 向量化计算

二进制字符串数组到十进制的向量化转换:

  1. x-'0':将字符数组转换为数值数组('0'→0,'1'→1)
  2. 2.^(size(x,2)-1:-1:0):生成二进制位权向量(从最高位到最低位)
  3. 点乘运算.*:将每个二进制位与其对应的位权相乘
  4. sum(..., 2):沿行方向求和,得到每个二进制串的十进制值

    例如输入3个8位二进制字符串时:

    1. 首先得到3×8的数值矩阵
    2. 与[128 64 32 16 8 4 2 1]位权矩阵相乘
    3. 每行求和得到[200; 201;

生成二进制位权向量的核心:2.^(size(x,2)-1:-1:0):生成二进制位权向量(从最高位到最低位):

  1. size(x,2) 获取输入矩阵x的列数(即二进制数的位数)
  2. size(x,2)-1:-1:0 创建从最高位到最低位的倒序索引(如8位二进制生成[7 6 5 4 3 2 1 0])
  3. 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]
posted @ 2025-05-15 09:08  洛弗尔  阅读(154)  评论(0)    收藏  举报