Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re^5: How to convert binary to hexadecimal

by roboticus (Chancellor)
on Mar 22, 2013 at 01:14 UTC ( [id://1024850]=note: print w/replies, xml ) Need Help??


in reply to Re^4: How to convert binary to hexadecimal
in thread How to convert binary to hexadecimal

Anonymonk:

Here's another way to do it:

$ cat bin2hex.pl #!/usr/bin/perl use strict; use warnings; for my $b (qw(101101110101001010010100101000101011101010101010101010 1 10 101 1010 10101 101010 11010011 000000000000001 000 +1111 11111 11000011 )) { print "$b --> ", bin2hex($b), "\n"; } sub bin2hex { my $bin = shift; # Make input bit string a multiple of 4 $bin = substr("0000",length($bin)%4) . $bin if length($bin)%4; my ($hex, $nybble) = (""); while (length($bin)) { ($nybble,$bin) = (substr($bin,0,4), substr($bin,4)); $nybble = eval "0b$nybble"; $hex .= substr("0123456789ABCDEF", $nybble, 1); } return $hex; } $ perl bin2hex.pl 101101110101001010010100101000101011101010101010101010 --> 2DD4A528AEA +AAA 1 --> 1 10 --> 2 101 --> 5 1010 --> A 10101 --> 15 101010 --> 2A 11010011 --> D3 000000000000001 --> 0001 0001111 --> 0F 11111 --> 1F 11000011 --> C3

It uses an old[1] trick: Since each "nybble"[2] represents a decimal value from 0 to 15, you can build a 16 character string of digits, and use the nybble value as the index of a character.

Then, to simplify things, we ensure that the string is a multiple of four characters long. That way, we simply chop off four characters, turn it into a hex digit, repeating until the string is consumed.

Notes:

[1] How old? It was old when I learned it, roughly 35 years ago.

[2] Four bits == half a byte, thus, a nybble.

...roboticus

When your only tool is a hammer, all problems look like your thumb.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1024850]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others goofing around in the Monastery: (5)
As of 2024-04-23 21:24 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found