В MATLAB (r2009b) у меня есть переменная uint32, содержащая значение 2147484101.
Это число (его 4 байта) было извлечено из цифровой камеры машинного зрения в процессе захвата.В соответствии с тем, что я понимаю, он содержит форму выдержки камеры с одинарной точностью (должна быть близка к 1/260 с = 3,8 мс).
Как преобразовать это 32-разрядное число в егоIEEE представление с плавающей точкой одинарной точности - используя то, что доступно в MATLAB?
С упомянутым значением в переменной n я попытался использовать комбинацию nn = dec2hex (n,16) , а затем hex2num (nn) .Но, похоже, что hex2num ожидает, что шестнадцатеричное кодирование будет двойной точности, а не единичным, как здесь.По крайней мере, я получаю странные числа с этим методом.
Любые идеи?
Редактировать: Tried @ Matt ответ ниже:
typecast(uint32(2147484101),'single') %# without swapbytes
typecast(swapbytes(uint32(2147484101)),'single') %# with swapbytes
Что дает:
ans =
-6.3478820e-043
ans =
-2.0640313e+003
Я попробовал конвертер IEEE 754 (апплет JAVA) в http://www.h -schmidt.net / FloatApplet / IEEE754.html .
Использование:
format hex
typecast(uint32(2147484101),'uint8') %# without swapbytes
typecast(swapbytes(uint32(2147484101)),'uint8') %# with swapbytes
дает
ans =
c5 01 00 80
ans =
80 00 01 c5
Ввод этих байтов в апплет (шестнадцатеричный) дает мне те же числа, что и MATLAB.