【问题标题】:Concatenate binary data in matlab?在matlab中连接二进制数据?
【发布时间】:2015-06-29 14:09:16
【问题描述】:

我想通过连接 两个 4 位 值和 一个 2 位 值来创建一个 10 位 二进制值。 例如:{2'b11,4'b1010,4'b1100}.

我将如何实现这一目标?

  • strcat(bin2b,bin4b,bin4b) 结果与串联,但此结果将被 Mlab 视为 STRING

【问题讨论】:

    标签: matlab binary octave


    【解决方案1】:

    那里有很多选项,具体取决于您想要的最终结果:

    bin2b  = '11' ;
    bin4b1 = '1010' ;
    bin4b2 = '1100' ;
    
    b10str = strcat(bin2b,bin4b1,bin4b2)    %// 10 bit value as a string type
    b10str = [bin2b bin4b1 bin4b2]          %// 10 bit value as a string type (same than above, shorthand notation for concatenation)
    
    b10dec = bin2dec(b10str)                %// 10 bit value as a numeric type (decimal base)
    
    b10hex = dec2hex(bin2dec(b10str))       %// string type again (hexadecimal base)
    
    b10bitarray = de2bi(b10dec)             %// array of 10 boolean (each represent one bit)
    

    这会给你:

    b10str =
    1110101100
    b10dec =
       940
    b10hex =
    3AC
    b10bitarray =
         0     0     1     1     0     1     0     1     1     1
    

    注意:在大多数 PC 上,二进制排序是“低端”。根据字节顺序,您可能希望在转换之前“翻转”您的位数组,这可以通过fliplr 完成:

    >> fliplr(b10str)
    ans =
    0011010111
    

    然后如上转换

    【讨论】:

    • 感谢您的解决方案。
    • 为了重新排序位,我们可以使用 de2bi(b10dec,'left-msb')
    • @Manojkumar。这是完全正确的。但是,它仅适用于这种特定的功能/格式。如果那是您使用的,那很好。 'fliplr' 选项更通用,因为它可以处理任何类型的数组(布尔值、数字、字符等......)。
    【解决方案2】:

    据我所知,最好的解决方法是编写一个在 C/C++/whatever 中执行此操作的函数,并使用 MEX API 从 Matlab 调用它。

    Matlab 不允许您以这种方式处理不真正支持的类型,或者如果您真的想在 Matlab 中进行处理,它会非常丑陋和缓慢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 2016-02-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-16
      相关资源
      最近更新 更多