Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ruby pack and hex values

A nibble is four bits. That means there are 16 (2^4) possible values. That means a nibble corresponds to a single hex digit, since hex is base 16. A byte is 2^8, which therefore can be represented by 2 hex digits, and consequently 2 nibbles.

So here below I have a 1 byte character:

'A'

That character is 2^8:

 'A'.unpack('B*')
 => ["01000001"] 

That means it should be represented by two hex digits:

 01000001 == 41

According to the Ruby documentation, for the Array method pack, when aTemplateString (the parameter) is equal to 'H', then it will return a hex string. But this is what I get back:

['A'].pack('H')
 => "\xA0" 

My first point is that's not the hex value it should return. It should have returned the hex value of 41. The second point is the concept of nibble, as I explained above, means for 1 byte, it should return two nibbles. But above it inserts a 0, because it thinks the input only has 1 nibble, even though 'A' is one byte and has two nibbles. So clearly I am missing something here.

like image 256
JohnMerlino Avatar asked Dec 26 '22 01:12

JohnMerlino


1 Answers

I think you want unpack:

'A'.unpack('H*') #=> ["41"]

pack does the opposite:

['41'].pack('H*') #=> "A"
like image 175
Stefan Avatar answered Jan 10 '23 10:01

Stefan