【问题标题】:How to convert array of bits to integer in Matlab? [duplicate]如何在Matlab中将位数组转换为整数? [复制]
【发布时间】:2012-01-15 10:41:30
【问题描述】:

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

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

我有一个类似 [0, 1, 1, 1] 的位数组,我想将其转换为简单的 int 数字 7。我使用 bitget(x, 1:3) 得到这个数组,其中 x 是一个整数.

【问题讨论】:

  • 从技术上讲,这可以解释为与 1552966 略有不同的问题,因为人们可以将此问题解释为如何从 x 的位范围中获取一个数字,我将使用位掩码和位来回答转变

标签: matlab binary


【解决方案1】:

作为@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],然后求和得到最终答案。

【讨论】:

    【解决方案2】:

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

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

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

      str=num2str(bin_vec);

    2. 使用bin2dec获取十进制值

      dec_num=bin2dec(str);

    【讨论】:

    • 外部吧?哦,好吧,自从我使用 Matlab 以来已经有一段时间了,我什至不知道我为什么要再次尝试使用它。也就是说,如果提问者对在 Matlab 中进行开发是认真的,那么使用外部库并没有什么坏处,尤其是当它们是由语言制造商而不是外部第三方提供时。
    • @Edwin 基本的 MATLAB 软件包不包括任何额外的工具箱,如 DAQ 工具箱。也许我应该多说(改变措辞)
    • 外部的意思是它不随 Matlab 一起提供,您必须为此支付额外费用。
    • @reseter 哦...我不知道。
    【解决方案3】:

    在 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

    【讨论】:

      猜你喜欢
      • 2020-02-06
      • 1970-01-01
      • 2016-05-09
      • 2013-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-26
      相关资源
      最近更新 更多