# How to unpack an IP packed in little endian byte order

**URL:** <https://www.ruby-forum.com/t/how-to-unpack-an-ip-packed-in-little-endian-byte-order/180326>\
**Category:** Ruby\
**Created:** [December 17, 2009, 2:57pm UTC](https://www.ruby-forum.com/t/how-to-unpack-an-ip-packed-in-little-endian-byte-order/180326 "2009-12-17T14:57:02Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![bakaonigiri](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/f0a364/32.png) [@bakaonigiri](https://www.ruby-forum.com/u/bakaonigiri)\
**Post date:** [December 17, 2009, 2:57pm UTC](https://www.ruby-forum.com/t/how-to-unpack-an-ip-packed-in-little-endian-byte-order/180326/1 "2009-12-17T14:57:02Z")

</div>

Hello to forum members,

Here’s my issue : I have IPs stored in a database but those are “little  
endian byte order” encoded and the field type of the BDD is BigInt  
(similar to Ruby’s BigNum).

How could I get back my human readable IP ? I’ve been digging around  
‘unpack’ for a while now but without success.

Here’s an example :  
BigNum stored in the database : 3232235797  
Resulting IP : 192.168.1.21

Could you give me some ideas or code ? I’m really stucked !

Thanks for all,

Liteo

---

<div class="post-metadata">

**Author:** ![bakaonigiri](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/f0a364/32.png) [@bakaonigiri](https://www.ruby-forum.com/u/bakaonigiri)\
**Post date:** [December 17, 2009, 3:21pm UTC](https://www.ruby-forum.com/t/how-to-unpack-an-ip-packed-in-little-endian-byte-order/180326/2 "2009-12-17T15:21:47Z")

</div>

2009/12/17 Nicolas V. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> BigNum stored in the database : 3232235797  
> Resulting IP : 192.168.1.21
> 
> Could you give me some ideas or code ? I’m really stucked !

Do you mean like this:

irb(main):020:0\> i  
=\> 3232235797  
irb(main):021:0\> ([i].pack(“N”)).unpack(“C\*”)  
=\> [192, 168, 1, 21]  
irb(main):022:0\> ([i].pack(“N”)).unpack(“C\*”).join(“.”)  
=\> “192.168.1.21”  
irb(main):023:0\>

Cheers

robert

---

<div class="post-metadata">

**Author:** ![bakaonigiri](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/f0a364/32.png) [@bakaonigiri](https://www.ruby-forum.com/u/bakaonigiri)\
**Post date:** [December 17, 2009, 3:23pm UTC](https://www.ruby-forum.com/t/how-to-unpack-an-ip-packed-in-little-endian-byte-order/180326/3 "2009-12-17T15:23:29Z")

</div>

Robert K. wrote:

> 2009/12/17 Nicolas V. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):
> 
> > BigNum stored in the database : 3232235797  
> > Resulting IP : 192.168.1.21
> > 
> > Could you give me some ideas or code ? I’m really stucked !
> 
> Do you mean like this:
> 
> irb(main):020:0\> i  
> =\> 3232235797  
> irb(main):021:0\> ([i].pack(“N”)).unpack(“C\*”)  
> =\> [192, 168, 1, 21]  
> irb(main):022:0\> ([i].pack(“N”)).unpack(“C\*”).join(“.”)  
> =\> “192.168.1.21”  
> irb(main):023:0\>
> 
> Cheers
> 
> robert

That’s exactly it.

Thanks a lot Robert, you saved my day !

---

<div class="post-metadata">

**Author:** ![bakaonigiri](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/f0a364/32.png) [@bakaonigiri](https://www.ruby-forum.com/u/bakaonigiri)\
**Post date:** [December 17, 2009, 4:49pm UTC](https://www.ruby-forum.com/t/how-to-unpack-an-ip-packed-in-little-endian-byte-order/180326/4 "2009-12-17T16:49:34Z")

</div>

Hi,

Am Donnerstag, 17. Dez 2009, 22:57:30 +0900 schrieb Nicolas V.:

> Here’s an example :  
> BigNum stored in the database : 3232235797  
> Resulting IP : 192.168.1.21

Here’s one without using pack/unpack:

ip = 3232235797  
a = []  
4.times { a.unshift ip & 0xff ; ip \>\>= 8 }  
a.join “.”  
#=\> “192.168.1.21”

Bertram

---

<div class="post-metadata">

**Author:** ![bakaonigiri](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/f0a364/32.png) [@bakaonigiri](https://www.ruby-forum.com/u/bakaonigiri)\
**Post date:** [December 18, 2009, 4:11pm UTC](https://www.ruby-forum.com/t/how-to-unpack-an-ip-packed-in-little-endian-byte-order/180326/5 "2009-12-18T16:11:26Z")

</div>

Bertram S. wrote:

> Hi,
> 
> Am Donnerstag, 17. Dez 2009, 22:57:30 +0900 schrieb Nicolas V.:
> 
> > Here’s an example :  
> > BigNum stored in the database : 3232235797  
> > Resulting IP : 192.168.1.21
> 
> Here’s one without using pack/unpack:
> 
> ip = 3232235797  
> a = []  
> 4.times { a.unshift ip & 0xff ; ip \>\>= 8 }  
> a.join “.”  
> #=\> “192.168.1.21”
> 
> Bertram

Hi Bertram,

Thanks for your code explaining the underlying theory.

Regards,
