我在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'。
答案 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 int64
和uint64
类型。