The implementation of hexadecimal to binary display in c language

  • 2020-04-01 23:32:24
  • OfStack


//======================================
//Output format: hex2bin 5e.
//You get: 0101 1110
//======================================
#include <stdio.h>
#include <limits.h>
char *bitstr(char *, void const *, size_t);
int main(int argc, char **argv)
{

   unsigned char value;
   char *pointer;
   char ebits[CHAR_BIT * sizeof value + 1];
   
   value = 0; 

   for (pointer = argv[1]; *pointer; ++pointer) {
     value <<= 4;
     switch (*pointer) {
        case 'a':
        case 'A':
            value += 0xa;
            break;
        case 'b':
        case 'B':
            value += 0xb;
            break;
        case 'c':
        case 'C':
            value += 0xc;
            break;
        case 'd':
        case 'D':
            value += 0xd;
            break;
        case 'e':
        case 'E':
            value += 0xe;
            break;
        case 'f':
        case 'F':
            value += 0xf;
            break;
        default:
            value += *pointer - '0';
            break; 
  }
   }
   bitstr(ebits, &value, sizeof value);
   printf("The binary representation of 0x%s is ", argv[1]);

   for (pointer = ebits, value = 0; *pointer != '0'; ++pointer) {
    if(value > 3) {
           value = 0;
     putchar(' ');
           putchar(*pointer);
    }
    else {
     value++;
        putchar(*pointer);
    }
   }
   
   return 0;
}

char *bitstr(char *str, const void *obj, size_t n)
{
   unsigned char mask;
   const unsigned char *byte = obj;
   char *const ptr = str;
   while (n--) {
      mask = ((unsigned char)-1 >> 1) + 1;
      do {
         *str++ = (char)(mask & byte[n] ? '1' : '0');
         mask >>= 1;
      } while (mask);
   }
   *str = '0';
   return ptr;
}


Related articles: