c语言中十六进制转二进制显示的实现方法

编辑作者:www.789mux.com    在线用户:49    标签: c语言   

c语言中如何实现十六进制转二进制显示?相信不少小伙伴们都被这个难题困扰过,那么我们现在将带着这个疑问去看看c语言中十六进制转二进制显示的实现方法吧。


//======================================

 

//输出格式: hex2bin 5e.

//得到: 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;
}

关于c语言中十六进制转二进制显示的实现方法将为大家介绍到这里啦,如果你还有不懂的地方就请留言给小编吧。

请发表您的评论