# Converting hex floats

**URL:** <https://www.ruby-forum.com/t/converting-hex-floats/59543>\
**Category:** Ruby\
**Created:** [May 4, 2006, 12:44am UTC](https://www.ruby-forum.com/t/converting-hex-floats/59543 "2006-05-04T00:44:19Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![burrowsm](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/d78d45/32.png) [@burrowsm](https://www.ruby-forum.com/u/burrowsm)\
**Post date:** [May 4, 2006, 12:44am UTC](https://www.ruby-forum.com/t/converting-hex-floats/59543/1 "2006-05-04T00:44:19Z")

</div>

What is the easiest way to convert a hex value like:

0x000000000000F03F (big endian, IEEE754)

to a Float in Ruby?

Thanks,  
Matt

---

<div class="post-metadata">

**Author:** ![burrowsm](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/d78d45/32.png) [@burrowsm](https://www.ruby-forum.com/u/burrowsm)\
**Post date:** [May 4, 2006, 1:03am UTC](https://www.ruby-forum.com/t/converting-hex-floats/59543/2 "2006-05-04T01:03:11Z")

</div>

On 3-May-06, at 6:44 PM, Matt Bauer wrote:

> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).

Probably using pack and unpack, my first guess is something like

irb(main):001:0\> [0x000000000000F03F].pack(‘Q’).unpack(‘G’)  
=\> [3.03865194161742e-319]

but now I have to look up IEEE and it looks reasonable:

irb(main):002:0\> [0x0000000000000000].pack(‘Q’).unpack(‘G’)  
=\> [0.0]  
irb(main):003:0\> [0x8000000000000000].pack(‘Q’).unpack(‘G’)  
=\> [-0.0]

and using a sample single precision number in binary from http://  
www.psc.edu/general/software/packages/ieee/ieee.html

0 10000001 10100000000000000000000 = +1 \* 2\*\*(129-127) \* 1.101 = 6.5

irb(main):005:0\> [0b01000000110100000000000000000000].pack(‘L’).unpack  
(‘g’)  
=\> [6.5]

Hope this helps,

Mike

–

Mike S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
[http://www.stok.ca/~mike/](http://www.stok.ca/~mike/)

The “`Stok’ disclaimers” apply.
