可能重复:
Converting binary to decimal without using loop如何在Matlab中将位数组转换为整数?
我正在寻找最简单,最快的解决方案。我试过文档,但可以找到任何东西。我有一个比特数组[0,1,1,1],我想将它转换为简单的int数字7.我用bitget(x,1:3)得到这个数组,其中x是一个整数。
可能重复:
Converting binary to decimal without using loop如何在Matlab中将位数组转换为整数?
我正在寻找最简单,最快的解决方案。我试过文档,但可以找到任何东西。我有一个比特数组[0,1,1,1],我想将它转换为简单的int数字7.我用bitget(x,1:3)得到这个数组,其中x是一个整数。
@ Edwin的答案使用binvec2dec这是Data Acquisition Toolbox的一部分。这个toobox是一个额外的工具箱(由Mathworks开发),但不是基本MATLAB包的一部分。
这是一个不依赖于此工具箱的解决方案。
使用num2str到二进制数组转换为字符串
STR = num2str(bin_vec);
使用BIN2DEC得到十进制值
dec_num = BIN2DEC(STR);
External huh?哦,从使用Matlab开始已经有一段时间了,我甚至不知道为什么我要再次尝试使用它。也就是说,如果提问者非常重视在Matlab中进行开发,那么使用外部库是没有什么坏处的,特别是当他们由语言制造者提供而不是外部第三方时。 – Edwin
@Edwin基本的MATLAB软件包不包含任何额外的工具箱,如DAQ工具箱。也许我应该说额外的(改变措辞) – Azim
外部的,因为它没有与Matlab出货,你必须支付额外的费用。 – mbatchkarov
在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
只是作为教学替代@Edwin和@阿齐姆的解决方案的(这是生产更好),尝试
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为教育学 – Azim
从技术上讲,这可能会被解释为一个稍微不同于1552966的问题,因为人们可以将这个问题解释为如何从x的位范围中获得一个数字,我会回答使用位掩码和位移 – Jimbo