Hexadecimal to Bit Display Utility

This is a very simple command-line utility to display 32bit hexadecimal numbers to a friendly bit-to-bit visualization, with a nice indication of bit offsets.

I found this really useful when decoding dumps of 32 bit registers against the register descriptions found in datasheets at 2 AM in the morning after a day spent watching boot logs on a terminal… this things can happen!

This is an example of the application call and output:

$ ./hex2bit deadbeef cafecafe 12345678
       bin:  3           2              1           0
            1098 7654 3210 9876 - 5432 1098 7654 3210

0xdeadbeef: 1101 1110 1010 1101 - 1011 1110 1110 1111 
0xcafecafe: 1100 1010 1111 1110 - 1100 1010 1111 1110 
0x12345678: 0001 0010 0011 0100 - 0101 0110 0111 1000

Please note that the 0x prefix on input arguments is optional.

Of course the application is really simple, just compile it with

gcc -o hex2bit hex2bit.c

and you are ready to go!

Source code:

#include <stdio.h>

int main (int argc, char ** argv)
{
  int in;
  int i;
  int j;

  printf("       bin:  3           2              1           0\n"\
         "            1098 7654 3210 9876 - 5432 1098 7654 3210\n"
         "\n");

  for (j = 1; j < argc; j++) {

    sscanf(argv[j], "%x", &in);
    
    printf("0x%08x: ", in);

    for (i = 31; i >= 0; i--) {
      if (in & (1 << i))
        putchar('1');
      else
        putchar('0');
      
      if (!(i % 4))
        putchar(' ');
      
      if (i == 16)
        printf("- ");
    }
    
    printf("\n");

  }

  return 0;
}
Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: