Конвертировать Hex в одинарную точность - PullRequest
4 голосов
/ 26 августа 2011

Я борюсь с преобразованием 32-битного шестнадцатеричного выражения в число с одной точностью в Matlab.

Функция num2hex отлично работает для обоих. Например,

>> b = 0.4

b =

   0.400000000000000

>> class(b)

ans =

double

>> num2hex(b)

ans =

3fd999999999999a

>> num2hex(single(b))

ans =

3ecccccd

Однако, это не работает наоборот. Функция hex2num only преобразует шестнадцатеричное выражение в double. Таким образом,

>> b = 0.4

b =

   0.400000000000000

>> num2hex(single(b))

ans =

3ecccccd

>> hex2num(ans)

ans =

    3.433227902860381e-006

Matlab просто добавляет нули, чтобы сделать его 64-битным гексом. Есть ли способ выполнить это преобразование?

Ответы [ 2 ]

10 голосов
/ 29 сентября 2011

Я нашел способ сделать это, используя встроенные функции в MATLAB

%#Let's convert 0x40100000 to Single Precision Float (should equal 2.25)

tempHex = '40100000';

tempVal = uint32(hex2dec(tempHex));

tempFloat = typecast(tempVal,'single')
%#result is 2.25
5 голосов
/ 26 августа 2011

Это кажется невозможным со встроенным hex2num, но, к счастью, вы можете получить версию с точностью до hex2num (hexsingle2num) здесь: http://www.mathworks.com/matlabcentral/fileexchange/6927-hexsingle2num

...