2013-08-29 2 views
4

У меня странная проблема с функцией hex2dec в Matlab. Я понял в 16-байтовых данных, он пропускает 2 байта LSB.Увеличьте выходной диапазон Hex2dec или dec2hex в Matlab

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 интерпретирует это как 14byte + '00'.

ответ

3

Вы должны использовать uint64 для хранения этого значения:

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

который возвращает

B = 

    1310867527582290490 
+0

попробовать это в Simulink, Simulink до сих пор получает все 14bytes данные + 0x00 – Ramyad

+1

Ну ваш первоначальный вопрос не говоря уже о Simulink. Simulink не поддерживает uint64 (http://www.mathworks.se/help/simulink/ug/working-with-data-types.html). Вам нужно рассматривать это как два 32-битных куска. –

+0

@MohsenNosratinia На самом деле OP упомянул Simulink: «Я использую это в Simulink». Я добавил тег Simulink к вопросу на раннем этапе. – am304

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 supportint64 и uint64 типы, как другие уже отмечали ..