2011-12-07 43 views
1

可能重复:
Converting binary to decimal without using loop如何在Matlab中将位数组转换为整数?

我正在寻找最简单,最快的解决方案。我试过文档,但可以找到任何东西。我有一个比特数组[0,1,1,1],我想将它转换为简单的int数字7.我用bitget(x,1:3)得到这个数组,其中x是一个整数。

+0

从技术上讲,这可能会被解释为一个稍微不同于1552966的问题,因为人们可以将这个问题解释为如何从x的位范围中获得一个数字,我会回答使用位掩码和位移 – Jimbo

回答

4

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

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

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

    STR = num2str(bin_vec);

  2. 使用BIN2DEC得到十进制值

    dec_num = BIN2DEC(STR);

+0

External huh?哦,从使用Matlab开始已经有一段时间了,我甚至不知道为什么我要再次尝试使用它。也就是说,如果提问者非常重视在Matlab中进行开发,那么使用外部库是没有什么坏处的,特别是当他们由语言制造者提供而不是外部第三方时。 – Edwin

+0

@Edwin基本的MATLAB软件包不包含任何额外的工具箱,如DAQ工具箱。也许我应该说额外的(改变措辞) – Azim

+0

外部的,因为它没有与Matlab出货,你必须支付额外的费用。 – mbatchkarov

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

9

只是作为教学替代@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],然后求和得出最终答案。

+0

+1为教育学 – Azim

相关问题