Octave报错horizontal dimensions mismatch的问题求解及代码修复
问题原因及解决办法
问题根源
- 报错核心是数组维度不匹配:
第一次循环时,UNICODED为单个数值65,dec2bin(UNICODED)返回1行7列的字符数组;第二次循环时,UNICODED变成[65,66],dec2bin会返回2行7列的字符数组(每个十进制数对应一行二进制字符串)。此时尝试将2行的数组与之前1行的BINARY_VALUE横向拼接,行数不一致,触发维度不匹配错误。 - 代码逻辑偏离需求:你需要每个字符的二进制单独存储,但当前代码不断累加所有字符的ASCII值,导致
dec2bin每次处理的是多个数值的集合,而非单个字符。
解决办法
方案1:用单元格数组单独存储(推荐)
直接在循环中处理单个字符的二进制,存入单元格数组,完全满足“单独存储”的需求:
PLAINTXT = "ABC"; BINARY_CELL = {}; % 单元格数组用于单独存储每个字符的二进制 for i = PLAINTXT ascii_val = unicode2native(i, "ISO-8859-1"); BINARY_CELL{end+1} = dec2bin(ascii_val); endfor % 查看结果 disp(BINARY_CELL);
运行后,BINARY_CELL的每个元素对应一个字符的二进制字符串,例如BINARY_CELL{1}为"1000001",BINARY_CELL{2}为"1000010"。
方案2:一次性转换所有字符(按行排列)
如果希望将所有二进制字符串按行组成二维数组,可以跳过循环,直接一次性处理所有字符:
PLAINTXT = "ABC"; UNICODED = unicode2native(PLAINTXT, "ISO-8859-1"); BINARY_VALUE = dec2bin(UNICODED); % 返回3行7列的数组,每行对应一个字符的二进制 disp(BINARY_VALUE);
这种方式避免了循环中累加导致的维度问题,代码更简洁。
内容的提问来源于stack exchange,提问作者mahmo0od
相关产品推荐
相关产品推荐

