如何在Matlab中将位数组转换为整数?

时间:2011-12-07 22:23:18

标签: matlab binary

  

可能重复:
  Converting binary to decimal without using loop

我正在寻找最简单,最快速的解决方案。我试过文档,但可以找到任何东西。

我有一个像[0,1,1,1]这样的位数组,我想把它转换成简单的int数字7.我得到这个数组有bitget(x,1:3),其中x是一个整数

3 个答案:

答案 0 :(得分:9)

作为@Edwin和@ Azim的解决方案(更适合制作)的教学替代方案,请尝试

b = [1 0 0 1]; % or whatever
sum(b.*(2.^[length(b)-1 : -1 : 0])) % => 9 for the above

我们使用2.^[length(b)-1 : -1 : 0] = [8 4 2 1]创建基本元素,将每个元素乘以二进制值以获得[8 0 0 1],然后求和得到最终答案。

答案 1 :(得分:4)

@ Edwin的回答使用 binvec2dec ,它是Data Acquisition Toolbox的一部分。这个toobox是一个额外的工具箱(由Mathworks开发),但不是基础MATLAB包的一部分。

这是一个不依赖于此工具箱的解决方案。

  1. 使用 num2str 将二进制数组转换为字符串

    STR = num2str(bin_vec);

  2. 使用 bin2dec 获取小数值

    dec_num = BIN2DEC(STR);

答案 2 :(得分:1)

在Matlab上有点生疏,但这应该有用。

% This assumes you're using a vector of dimension 1 x n (i.e. horizontal vector)
% Otherwise, use flipud instead of fliplr
function [dec_num] = convert(bin_vec)
bin_vec = fliplr(bin_vec);
dec_num = binvec2dec(bin_vec);

% EDIT: This should still work
num = convert(bitget(x, 1:3);

为了将来参考,如果这是关于家庭作业,请使用家庭作业标签。

binvec2dec Documentation
fliplr Documentation
flipud Documentation