在Matlab中增加Hex2dec或dec2hex的输出范围



我在Matlab中遇到了一个关于hex2dec函数的奇怪问题。我意识到在16字节的数据中,它省略了2个LSB字节。

hex2dec('123123123123123A');
dec2hex(ans)
Warning: At least one of the input numbers is larger than the largest integer-valued floating-point
number (2^52). Results may be unpredictable. 
ans =
1231231231231200

我在Simulink中使用这个。因此,我无法处理16字节的数据。Simulink将其解释为14字节+"00"。

您需要使用uint64来存储该值:

A='123123123123123A';
B=bitshift(uint64(hex2dec(A(1:end-8))),32)+uint64(hex2dec(A(end-7:end)))

返回

B =
  1310867527582290490

MATLAB中使用typecast:的另一种方法

>> A = '123123123123123A';
>> B = typecast(uint32(hex2dec([A(9:end);A(1:8)])), 'uint64')
B =
  1310867527582290490

相反的方向:

>> AA = dec2hex(typecast(B,'uint32'));
>> AA = [AA(2,:) AA(1,:)]
AA =
123123123123123A

其思想是将64位整数视为两个32位整数。

也就是说,Simulink不支持其他人已经注意到的int64uint64类型。。

相关内容

  • 没有找到相关文章

最新更新