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

4

如何在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         
2个回答

5

您希望数组的条目是数字而不是字符吗? 如果是,则应该可以使用以下代码:

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

这将创建一个向量,其中字母表示为它们在字母表中的数字,对吗?(这不是我想要的)。 - Bjarke Freund-Hansen
@bjarkef 不是的,这会创建一个由0或1组成的双精度向量。我已经编辑了我的回答以展示输出结果。另一个答案则创建了一个由字符组成的向量,即字符串。 - stardt
太好了,看起来正是我正在寻找的。 :) - Bjarke Freund-Hansen

2

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

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

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

编辑:正如Oli Charlesworth在下面提到的,可以通过以下代码实现:

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

1
你不能只是这样做吗:reshape(dec2bin(str,8)', 1, []) - Oliver Charlesworth
@Oli Charlesworth:你也可以这样做(我猜这可能会更快)。我不知道你可以将空维度传递给“reshape”,这就是为什么我没有考虑过它。所以谢谢你! - Egon
@Egon:你有没有一个对应于我问题中示例输入字符串的输出示例? - Bjarke Freund-Hansen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接