Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert Hex to single precision

I'm struggling with converting a 32-bit hex expression into a single precision number in Matlab.

The num2hex function works fine for both. For example,

>> b = 0.4

b =

   0.400000000000000

>> class(b)

ans =

double

>> num2hex(b)

ans =

3fd999999999999a

>> num2hex(single(b))

ans =

3ecccccd

However, this does not work the other way around. The hex2num function only converts hexadecimal expression into doubles. So,

>> b = 0.4

b =

   0.400000000000000

>> num2hex(single(b))

ans =

3ecccccd

>> hex2num(ans)

ans =

    3.433227902860381e-006

Matlab simply pads zeros to make it a 64-bit hex. Is there a way to perform this conversion?

like image 644
Phonon Avatar asked Dec 06 '22 19:12

Phonon


2 Answers

There's a way I found to do this usign built in functions in 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
like image 63
Chris Avatar answered Dec 27 '22 12:12

Chris


It doesn't seem to be possible with the built-in hex2num, but fortunately you can get a single precision version of hex2num (hexsingle2num) here: http://www.mathworks.com/matlabcentral/fileexchange/6927-hexsingle2num

like image 21
Paul R Avatar answered Dec 27 '22 10:12

Paul R