我怎么能把每个结果都作为一个向量?

时间:2016-07-22 08:23:29

标签: matlab

我认为我总是遇到同样的问题,矢量,数组和单元格数组,多亏了这个讨论,How can I split a Text in blocks of 16 bytes every one?我可以解决我的第一个问题。但是我仍然需要数据中的每个结果必须是e vector才能加密它。

fid = fopen('file.txt', 'r');
alldata = textscan(fid, '%s');
tmp = reshape(alldata{1}, 16, []).';
tmp = arrayfun(@(x)strjoin(tmp(x,:)), 1:size(tmp, 1), 'uniformoutput', false)
key=hex2dec(key_hex).'
data= (cat(1, tmp{:}))

for i= 1:rows(data)
  Matrix(i, :)= hex_keys([data(i,1:15), data(i,16)])
  chiffrement (Matrix(i,:), key,1)
endfor

endfunction

我的错误是:错误:明文必须是包含16个元素的向量(不是单元格数组)。 如果你能帮助我,我将非常感激。

file.txt包含例如:

60 3d eb 10 15 ca 71 be 2b 73 ae f0 85 7d 77 81 60 3d eb 10 15 ca 71 be 2b 73 ae f0 85 7d 77 81 60 3d eb 10 15 ca 71 be 2b 73 ae f0 85 7d 77 81

事实上,它是一个很大的程序和功能的成功,我需要的是如何将此数据结果中的每一行转换为向量。

data =

60 3d eb 10 15 ca 71 be 2b 73 ae f0 85 7d 77 81
60 3d eb 10 15 ca 71 be 2b 73 ae f0 85 7d 77 81
60 3d eb 10 15 ca 71 be 2b 73 ae f0 85 7d 77 81

1 个答案:

答案 0 :(得分:2)

我认为你过度使问题复杂化了,我的假设是你要将file.txt中的数据转换为数字(即你使用hex2dec),所以让我们这样做,让Arrayfun摆脱问题:

fid = fopen('file.txt', 'r');
alldata = textscan(fid, '%s');
tmp = reshape(alldata{1}, 16, []).'; % here we still parse 16 hex for every row using your function call
tmp = cellfun(@hex2dec,tmp,'un',0) % now we use cellfun to convert all your hex to numbers
Matrix = cell2mat(tmp)

Matrix =

96    61   235    16    21   202   113   190    43   115   174   240   133   125   119   129
96    61   235    16    21   202   113   190    43   115   174   240   133   125   119   129
96    61   235    16    21   202   113   190    43   115   174   240   133   125   119   129

whos Matrix

Name        Size            Bytes  Class     Attributes

Matrix      3x16              384  double        

现在你可以使用你的for循环来做任何你想做的事情,它变成了常规的索引。