背景
我有一个十六进制值的char数组,如下所示:
FF23 0008 FF58 00DE 00FC 0008
FF23 0008 FF58 00DF 0012 000C
FF23 0008 FF58 00DD 00F9 000C
FF23 0008 FF58 00DB 00F1 000B
....etc....
分离有\ t(标签)。我设法按下char数组以使换行成为新行(即size(string) = numOfRows, 1
)。
我需要将它们放入自己的4列中,以便我可以绘制值。是的,hex2dec
是我的目标,但它现在不会处理标签。
问题
鉴于上面的char数组,我如何将每个4个字符组组成各自的列?如果需要,我可以取出标签并使用不同的分隔符。
我的不良尝试
xlsread('C:\somefile', charArray)
这对我不起作用,因为我的计算机上没有Office,只有LibreOffice(http://tinyurl.com/kecqeg6)。
我试过了:
reshape(charArray, length(charArray), 6)
但是这会回来:
??? Error using ==> reshape
To RESHAPE the number of elements must not change.
我理解,但是来吧。 reshape()
有点意味着你可以做这些事情。
感谢您的帮助。我很感激。
修改
之前我认为我有一个字符串向量,而不是char数组。我已更新帖子以反映这一点。再次感谢你。
答案 0 :(得分:1)
这是你想要的吗?
A = ['FF23 0008 FF58 00DE 00FC 0008'
'FF23 0008 FF58 00DF 0012 000C']; %// example data (char array)
B = regexprep(mat2cell(A,ones(1,size(A,1)),size(A,2)),'\s',''); %// get rid of \t
B = vertcat(B{:}) - '0'; %// turn B into a numeric matrix...
ind = B>=17;
B(ind) = B(ind) - 7; %// ... with values 0--15
B = reshape(permute(B,[2 3 1]),4,[],size(A,1)); %// reshape to make groups of 4
result = squeeze(sum(bsxfun(@times, B, 16.^(3:-1:0).'))).' %// convert each group
使用示例A
,这会给出
result =
65315 8 65368 222 252 8
65315 8 65368 223 18 12
答案 1 :(得分:0)
将文本文件转换为char数组是不必要的步骤。您可以直接从文本文件中工作。
fid = fopen('test.txt','r'); %read text file
C = textscan(fid,'%s%s%s%s%s%s', 'delimiter',' \t','MultipleDelimsAsOne',1); % 6 cols of chars
fclose(fid)
D = hex2dec(vertcat(C{:})); % convert cells in strings, concatenate, then convert in doubles
D = reshape(D, numel(D)/6, 6); % reshape the matrix