Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Matlab-将字符向量转换为数字向量?_Regex_Matlab_Serial Port - Fatal编程技术网

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

Regex Matlab-将字符向量转换为数字向量?,regex,matlab,serial-port,Regex,Matlab,Serial Port,我正在尝试实现一个数字输入示波器,并通过串行端口发送它进行调试。我让scope软件向Matlab发送一个字符串,如“00000011111100000000 1111111000000”。我想画这个。有没有办法把这个字符串拆分成一个向量。Matlab似乎不允许在没有分隔符的情况下使用strsplit()。我不希望在每个字节之间都用分隔符来分隔通信。我很惊讶这是多么困难。但我想到的是: str = '000001111111110000000000111111111110000000'; %tes

我正在尝试实现一个数字输入示波器,并通过串行端口发送它进行调试。我让scope软件向Matlab发送一个字符串,如“00000011111100000000 1111111000000”。我想画这个。有没有办法把这个字符串拆分成一个向量。Matlab似乎不允许在没有分隔符的情况下使用strsplit()。我不希望在每个字节之间都用分隔符来分隔通信。

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

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()的情况下重做。非常感谢。