Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
Arrays 如何声明一个matlab变量来存储字符串?_Arrays_String_Matlab - Fatal编程技术网

Arrays 如何声明一个matlab变量来存储字符串?

Arrays 如何声明一个matlab变量来存储字符串?,arrays,string,matlab,Arrays,String,Matlab,在这个matlab代码中 % kalimba memory read clear all clc close all read_val = zeros(128, 1); read_val_INDEX = 1; fid = fopen('kal_mem_data.txt', 'r'); % assume each row has 1 address string and 16 data strings for j=1:8 asd = fscanf(fid, '%s', 1); % ski

在这个matlab代码中

% kalimba memory read
clear all
clc
close all
read_val = zeros(128, 1);
read_val_INDEX = 1;
fid = fopen('kal_mem_data.txt', 'r');
% assume each row has 1 address string and 16 data strings
for j=1:8
    asd = fscanf(fid, '%s', 1);  % skip the address string
    for i=1:16
        read_val(read_val_INDEX) = fscanf(fid, '%s', 1);
        read_val_INDEX = read_val_INDEX + 1;
    end
end
fclose(fid);  
kal_mem_data.txt有一个十六进制数字列表,如下所示:

0001c1 FF45DF 012345 ...  
第一个scanf工作正常

asd = fscanf(fid, '%s', 1);  
asd自动类型转换为char类型,以将十六进制字符串存储为字符数组
如何预先声明数组读取值,以便读取值的每个元素都是字符串?

在matlab中有没有一种简单的方法可以做到这一点?

如果所有字符串的长度都相同:

您可以预先分配128x6矩阵(假设字符串长度为6),如下所示:

read_val = char(zeros(128, 6, 'uint8'));
read_val(read_val_INDEX, :) = fscanf(fid, '%s', 1);
read_val = cell(128, 1);
read_val{read_val_INDEX} = fscanf(fid, '%s', 1);
然后,您将读取一行中的每个字符串,如下所示:

read_val = char(zeros(128, 6, 'uint8'));
read_val(read_val_INDEX, :) = fscanf(fid, '%s', 1);
read_val = cell(128, 1);
read_val{read_val_INDEX} = fscanf(fid, '%s', 1);
如果字符串的长度不一定相同:

一个好的方法是使用单元数组,如下所示:

read_val = char(zeros(128, 6, 'uint8'));
read_val(read_val_INDEX, :) = fscanf(fid, '%s', 1);
read_val = cell(128, 1);
read_val{read_val_INDEX} = fscanf(fid, '%s', 1);
你会这样读:

read_val = char(zeros(128, 6, 'uint8'));
read_val(read_val_INDEX, :) = fscanf(fid, '%s', 1);
read_val = cell(128, 1);
read_val{read_val_INDEX} = fscanf(fid, '%s', 1);

是的,它们是相同长度的6位十六进制数字