我正在寻找最简单,最快速的解决方案。我试过文档,但可以找到任何东西。
我有一个像[0,1,1,1]这样的位数组,我想把它转换成简单的int数字7.我得到这个数组有bitget(x,1:3),其中x是一个整数
答案 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包的一部分。
这是一个不依赖于此工具箱的解决方案。
使用 num2str 将二进制数组转换为字符串
STR = num2str(bin_vec);
使用 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