Regex Matlab-将字符向量转换为数字向量?
我正在尝试实现一个数字输入示波器,并通过串行端口发送它进行调试。我让scope软件向Matlab发送一个字符串,如“00000011111100000000 1111111000000”。我想画这个。有没有办法把这个字符串拆分成一个向量。Matlab似乎不允许在没有分隔符的情况下使用strsplit()。我不希望在每个字节之间都用分隔符来分隔通信。我很惊讶这是多么困难。但我想到的是:Regex Matlab-将字符向量转换为数字向量?,regex,matlab,serial-port,Regex,Matlab,Serial Port,我正在尝试实现一个数字输入示波器,并通过串行端口发送它进行调试。我让scope软件向Matlab发送一个字符串,如“00000011111100000000 1111111000000”。我想画这个。有没有办法把这个字符串拆分成一个向量。Matlab似乎不允许在没有分隔符的情况下使用strsplit()。我不希望在每个字节之间都用分隔符来分隔通信。我很惊讶这是多么困难。但我想到的是: str = '000001111111110000000000111111111110000000'; %tes
str = '000001111111110000000000111111111110000000'; %test string
y = cellfun(@(x) str2num(x), regexp(str,'\d','match'));
plot(y);
regexp()似乎是唯一的选择。默认情况下,它返回匹配的索引,因此您需要指定“match”。然后,您将得到一个字符串单元格数组。将其转换为数字数组的唯一好方法是使用str2num()一次转换一个项目
我希望这有助于其他人,他们假设有一个我假设的直接函数。如果有人知道一种不用将我的“01…01…01…01…00…00…00…00”字节流转换成二进制数字的ascii表示的方法:“49…49…49…49…48…48…48…48…48”,我很乐意听到它。一个快速的解决方案是:
data = '000001111111110000000000111111111110000000';
vec = str2double(cellstr(data.').');
它将生成数值的列向量。如果要将行向量作为输出,只需使用单个转置:
vec = str2double(cellstr(data.'));
使用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'
的序数值,留下数值0
或1
,您可以使用单个值宽度:
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
“把这个字符串分割成一个向量”——你的确切意思是什么?请编辑您的问题,以显示您的示例所需的输出是什么样子。天哪,我从来没有想过这是一个合乎逻辑的解决方案。我可能还有大约100行代码可以在没有str2num()的情况下重做。非常感谢。