В MATLAB (r2009b) у меня есть переменная uint32, содержащая значение 2147484101.
Это число (его 4 байта) было извлечено из цифровой камеры машинного зрения в процессе захвата. Насколько я понимаю, он содержит форму выдержки камеры с одинарной точностью (должна быть близка к 1/260 с = 3,8 мс).
Как мне преобразовать это 32-битное число в его представление с плавающей запятой одинарной точности IEEE, используя то, что доступно в MATLAB?
С указанным значением в переменной n я попытался использовать комбинацию nn=dec2hex(n,16), а затем hex2num(nn). Но похоже, что hex2num ожидает, что шестнадцатеричное кодирование будет двойной точности, а не одинарной, как здесь. По крайней мере, я получаю странные цифры с помощью этого метода.
Любые идеи?
Изменить: Попробовал ответ @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.