我在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不支持其他人已经注意到的int64
和uint64
类型。。