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

时间:2013-08-29 10:15:41

标签: matlab simulink hex uint64

我在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中使用它。因此我无法处理16byte数据。 Simulink将其解释为14byte + '00'。

2 个答案:

答案 0 :(得分:3)

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

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

返回

B =

  1310867527582290490

答案 1 :(得分:0)

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 does not support int64uint64类型。