如何在Matlab中用十六进制输入创建4×4数组并解决reshape报错
报错原因
Error using reshape
To RESHAPE the number of elements must not change.
该错误触发的核心逻辑是:你当前使用的key是16行2列的字符数组,总共有16*2=32个独立的字符元素,直接调用reshape(key, [4,4])要求生成仅含16个元素的数组,元素总数不匹配。
解决方案
根据你要生成的4×4数组类型,分两种常用场景调整代码:
场景1:生成数值型4×4数组(把十六进制转成对应十进制数值)
先通过hex2dec把每个两位十六进制字符串转成数值,得到16个元素的一维数组后再做reshape:
% 把十六进制字符数组转成数值数组,输出为16×1的double数组 key_num = hex2dec(key); % 按行优先顺序排成4×4数组,和你输入的16行顺序对应 w = reshape(key_num, 4, 4)';
运行后得到的w就是数值数组,第一行值为65 66 67 68(对应十六进制41~44的十进制值),和输入顺序完全匹配。
场景2:生成字符型4×4数组(保留十六进制字符串形式)
如果需要每个元素依然是两位十六进制字符,先把字符数组转成单元格数组再reshape:
% 把每行的两位字符转成单元格元素,输出为16×1的cell数组 key_cell = cellstr(key); % 按行优先顺序排成4×4单元格数组 w_cell = reshape(key_cell, 4, 4)';
运行后w_cell{1,1}就是字符串'41',符合结构要求。
内容的提问来源于stack exchange,提问作者Anis Zaitunah
相关产品推荐
相关产品推荐

