【问题标题】:ASCII string to binary vector in MATLAB?ASCII字符串到MATLAB中的二进制向量?
【发布时间】:2011-10-21 22:09:40
【问题描述】:

如何将 MATLAB 中的字符串转换为该字符串的 ASCII 表示的二进制向量?

比如我要转换

string = 'Mary had a little lamb';

到一个看起来像这样的向量:

[0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1, etc.]
\-------v------/ \-------v------/
        M                a         

【问题讨论】:

    标签: string matlab binary


    【解决方案1】:

    您希望数组的条目是数字而不是字符吗?如果是,那么这应该有效:

    s = 'Mary had a little lamb';
    a = dec2bin(s,8)';
    a = a(:)'-'0'
    

    显示其作用的示例输出是:

    >> s = 'Ma';          
    >> a = dec2bin(s,8)'; 
    >> class(a)
    ans =
    char
    >> a = a(:)'-'0'      
    a =
      Columns 1 through 13
         0     1     0     0     1     1     0     1     0     1     1     0     0
      Columns 14 through 16
         0     0     1
    >> class(a)
    ans =
    double
    

    【讨论】:

    • 这将创建一个向量,其中字母表示为字母表中的数字,对吗? (这不是我想要的)。
    • @bjarkef 不,这会创建一个双精度为 0 或 1 的向量。我已编辑我的响应以显示输出。另一个答案创建一个带有字符的向量,即一个字符串。
    • 太好了,看起来和我当时正在寻找的完全一样。 :)
    【解决方案2】:

    这很简单,但您必须知道 MATLAB 在内部以 ASCII 格式存储字符串,并且能够使用相应的数值进行计算。

    所以我们首先将每个字符(数字)转换为二进制扩展(长度为 8),最后我们将所有这些单元格连接在一起以获得您想要的结果。

    x = arrayfun(@(x)(dec2bin(x,8)), string, 'UniformOutput', false)
    x = [x{:}]
    

    编辑:正如 Oli Charlesworth 在下面提到的,同样可以通过以下代码完成:

    reshape(dec2bin(str, 8)', 1, [])
    

    【讨论】:

    • 你不能只做reshape(dec2bin(str,8)', 1, [])吗?
    • @Oli Charlesworth:你也可以这样做(我想这可能会更快一些)。我不知道你可以将空维度传递给reshape,这就是为什么我没有考虑过。所以谢谢你!
    • @Egon:你有与我的问题中的示例输入字符串对应的输出示例吗?
    猜你喜欢
    • 2012-08-02
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 2014-06-14
    相关资源
    最近更新 更多