我有什么
我有一个 char 数组,通过在两个 char 数组之间执行 strcat 来定义,如下所示:
coeficientes = strcat(coef_bin, coef_bin_comp)
然后,我想读取每一行并将它们转换为十六进制。我这样做是这样的:
for k=1:11
coef_binario = coeficientes(1+(k-1)*8:k*8);
coef_hexadecimal = binaryVectorToHex( coef_binario - '0' );
fprintf('%s\t%s\n', coef_binario, coef_hexadecimal);
end
结果是什么
如果我打印 coeficientes
变量和要转换的每个 coef_binario
,结果如下:
注意:coeficientes
是通过删除 strcat 行后的分号来打印的,但 coef_binario
是通过使用 fprintf
打印的,如上面所写。
coeficientes =
00011111 00111101 01001100 01011011 01111001 10001000 10010111
10110101 11000100 11010011 11110001
00000111 07 11100111 E7 00011101 1D
00100100 24 11101101 ED 10111111 BF
11000001 C1 11000111 C7 00100100 24
10010110 96 11011011 DB
问题
如您所见,我尝试使用以下方法逐行读取coeficientes
var:
coef_binario = coeficientes(1+(k-1)*8:k*8);
但是当打印出来时,二进制代码与原始代码不匹配。知道为什么或者如何才能正确地做到这一点吗?
更新 1
如果我尝试在执行此操作之前对其进行拆分,以便在需要获取字符串之前使用strsplit
。我试过:
strs = strsplit(sprintf('%s', coeficientes), ' ')
由此,我再次获得错误链。事实上,在仅使用 sprintf
(而不是 strsplit
)后,我得到的是:
0000011111100111000111010010010011101101101111111100000111000111001001001001011011011011
更新 2
如何生成coeficientes
:
% coef_k is a vector of decimal numbers, i.e.: [1 3 5 8 11 14]
coef_bin = dec2bin(coef_k);
coef_complementario = 16 - coef_k;
coef_bin_comp = dec2bin(coef_complementario);
coeficientes = strcat(coef_bin, coef_bin_comp)
最佳答案
直接的问题是 MATLAB 按列优先顺序存储数据,因此本质上发生的情况是,如果您的数据是 2D 字符数组(dec2bin
的输出):
c = ['00011111'
'00111101'
'01001100'
'01011011'
'01111001'
'10001000'
'10010111'
'10110101'
'11000100'
'11010011'
'11110001'];
然后,当您使用诸如 1+(k-1)*8:k*8
这样的线性索引时,它会沿着列读取,而不是像这样跨行读取你想要的。
例如,对于k = 1
:
k = 1;
c(1+(k-1)*8:k*8)
% 00000111 <---- Clearly not the first row. It is the first 8 entries going
% down the first column.
您有四个选择:
在处理之前转置
c
(以使数字沿着列向下移动):c = c.'; k = 1; c(1+(k-1)*8:k*8) % 00011111 <---- The first row like you would expect!
调整索引表达式以跨列
k = 1; c(k:size(c,1):end) % 00011111 <---- The first row like you would expect!
只需使用普通矩阵索引即可获取一行
k = 1; c(k,:) % 00011111 <---- The first row like you would expect!
只需使用内置的
bin2dec
后跟dec2hex
即可获取十六进制表示形式。如果您将二维字符数组传递给bin2dec
,它会将每个行解释为不同的二进制数。hex = dec2hex(bin2dec(c)); 1F 3D 4C 5B 79 88 97 B5 C4 D3 F1
关于arrays - 在matlab中读取字符数组行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37364803/