Matlab - 将字符向量转换为数字向量?

时间:2018-01-05 21:04:43

标签: regex matlab serial-port

我正在尝试为数字输入实现示波器,并通过串行端口进行调试。我有范围软件发送Matlab字符串像" 000000111111111000000001111111000000"。我想画这个。有没有办法让我把这个字符串拆分成一个向量。看起来Matlab不允许你使用没有分隔符的strsplit()。我宁愿不用每个字节之间的分隔符来阻塞通信。

4 个答案:

答案 0 :(得分:7)

使用MATLAB的弱类型,这实际上非常简单:

>> str = '000000111111111000000001111111000000'
str = 000000111111111000000001111111000000
>> class(str)
ans = char

>> vec = str - '0'
vec =

 Columns 1 through 22:

   0   0   0   0   0   0   1   1   1   1   1   1   1   1   1   0   0   0   0   0   0   0

 Columns 23 through 36:

   0   1   1   1   1   1   1   1   0   0   0   0   0   0
>> class(vec)
ans = double

这会从字符串中的每个字符中减去字符'0'的序数值,并保留数值01

答案 1 :(得分:2)

您可以将sscanf与单个宽度值一起使用:

a = '000000111111111000000001111111000000'
b = sscanf(a, '%1d');

返回:

>> b.'

ans =

  Columns 1 through 18

     0     0     0     0     0     0     1     1     1     1     1     1     1     1     1     0     0     0

  Columns 19 through 36

     0     0     0     0     0     1     1     1     1     1     1     1     0     0     0     0     0     0

答案 2 :(得分:1)

快速而快速的解决方案是:

data = '000001111111110000000000111111111110000000';
vec = str2double(cellstr(data.').');

它将生成数值的列向量。如果你想要一个行向量作为输出,只需使用一个转置:

vec = str2double(cellstr(data.'));

答案 3 :(得分:0)

我很惊讶这是多么困难。但这就是我想出的:

str = '000001111111110000000000111111111110000000'; %test string
y = cellfun(@(x) str2num(x), regexp(str,'\d','match'));
plot(y);

regexp()似乎是唯一的出路。默认情况下,它返回匹配的索引,因此您需要指定匹配'。然后你最终得到一个字符串的单元格数组。将其转换为数值数组的唯一好方法是使用str2num()一次一个项目。

我希望这可以帮助其他人,因为我假设有一个直接的功能。如果有人知道如何做到这一点而不转换我的" 01 ... 01 .... 01 .... 01 .... 00 .... 00 .... 00 .... 00"字节流到二进制数的ascii表示中:" 49 ..... 49 ..... 49 .... 49 .... 48 .... 48 .... 48。 ... 48",我很乐意听到它。