# To and from hex nibbles

**URL:** <https://www.ruby-forum.com/t/to-and-from-hex-nibbles/140041>\
**Category:** Ruby\
**Created:** [June 10, 2008, 10:51am UTC](https://www.ruby-forum.com/t/to-and-from-hex-nibbles/140041 "2008-06-10T10:51:41Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![daniel\_SSSSkerud](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/8e8cbc/32.png) [@daniel\_SSSSkerud](https://www.ruby-forum.com/u/daniel_SSSSkerud)\
**Post date:** [June 10, 2008, 10:51am UTC](https://www.ruby-forum.com/t/to-and-from-hex-nibbles/140041/1 "2008-06-10T10:51:41Z")

</div>

Hello, I am converting to and from hex nibbles using the code below. Is  
there a smarter way for this?

To hex nibbles:  
‘testing 123’.scan(/./).collect { |i| i.unpack(‘C’)[0].to\_s(16) }.join  
=\> “74657374696e6720313233”

and back to binary:

“74657374696e6720313233”.scan(/…/).collect { |i| i.to\_i(16)  
}.pack(‘C\*’)  
=\> “testing 123”

Thanks,

/D

---

<div class="post-metadata">

**Author:** ![daniel\_SSSSkerud](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/8e8cbc/32.png) [@daniel\_SSSSkerud](https://www.ruby-forum.com/u/daniel_SSSSkerud)\
**Post date:** [June 10, 2008, 11:44am UTC](https://www.ruby-forum.com/t/to-and-from-hex-nibbles/140041/2 "2008-06-10T11:44:49Z")

</div>

From: daniel åkerud [[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)]

# ‘testing 123’.scan(/./).collect { |i| i.unpack(‘C’)[0].to\_s(16) }.join

# =\> “74657374696e6720313233”

# and back to binary:

# “74657374696e6720313233”.scan(/…/).collect { |i| i.to\_i(16)

# }.pack(‘C\*’) # =\> “testing 123”

s=‘testing 123’.unpack(“H\*”)[0]  
#=\> “74657374696e6720313233”

s.scan(/…/).map{|i| i.to\_i(16)}.pack(“C\*”)  
#=\> “testing 123”

kind regards -botp

---

<div class="post-metadata">

**Author:** ![daniel\_SSSSkerud](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/8e8cbc/32.png) [@daniel\_SSSSkerud](https://www.ruby-forum.com/u/daniel_SSSSkerud)\
**Post date:** [June 10, 2008, 11:54am UTC](https://www.ruby-forum.com/t/to-and-from-hex-nibbles/140041/3 "2008-06-10T11:54:51Z")

</div>

# s.scan(/…/).map{|i| i.to\_i(16)}.pack(“C\*”)

# #=\> “testing 123”

sorry, i missed dblack’s scanf

s.scanf("%2x"_s.size).pack("C_")  
#=\> “testing 123”

kind regards -botp
