MATLAB中的dec2hex(D)
函数返回一个二维字符串数组,其中每一行是D中每个十进制整数的十六进制表示。假设我使用此函数读取我的输入数据(ANSI字符),并转换此数据为1字节十六进制表示,使得生成的矩阵是 L x 4 char矩阵(应该 L x 2 但仍然是)。由于数据中存在一些2字节数字,因此我无法简单地将这些十六进制值转换为十进制值。现在,为了获得这些2字节十六进制数的十进制值,我使用以下行(矩阵中的后一个值对应于MSB):
hex2dec(strcat(data_hex(index+1,:),data_hex(index,:)));
所以我将十六进制矩阵的两行(每个包含4列和单个字符串)连接成一个字符串,并将此字符串转换为十进制。但是,这需要很多时间;这条线大约执行7000次,需要1.2秒。由于这仍然是一个相对较小的数据集,我正在寻找一种更快的方法来实现我的目标。请注意,将整个十六进制矩阵转换为十进制数只需要可忽略的时间,因此我希望我可以使用十进制表示。任何帮助,将不胜感激!
读取2字节十六进制数的示例:
- 创建一个由2个十进制值组成的向量(例如T = [46 23]
)
- 将此向量转换为十六进制表示形式:T_hex = dec2hex(T)
。生成的矩阵的大小为 2x2 ,每个元素都是一个char(例如T_hex=[2E;17]
- 现在我想将此矩阵作为单个值"172E"
读取,并将其转换为十进制数。为此,我使用了上面的行,在这种情况下hex2dec(strcat(T_hex(2,:),T_hex(1,:)))
,其中5934作为输出
答案 0 :(得分:0)
尝试在每个字节上单独运行hex2dec
。然后,您可以使用results = 256*MSB + LSB
您也可以尝试使用sscanf(hexStr,'%x')
而不是hex2dec(hexStr)
。在我的系统sscanf
上快3-4。