十进制转换成十六进制和16进制转2进制的实现2015-02-17
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <locale.h>int main() {int i,v;char bs[33];char b[33];char hs[9];char h[9];char s[4];char *e;// 十进制整数转二进制串;i=1024;ltoa(i,b,2);sprintf(bs,"%032s",b);printf("i=%d,bs=%s
",i,bs);// 十进制整数转十六进制串;i=1024;ltoa(i,h,16);sprintf(hs,"%08s",h);printf("i=%d,hs=%s
",i,hs);// 十六进制字符串转成十进制数strcpy(hs,"00000400");sscanf(hs,"%x",&i);printf("hs=%s,i=%d
",hs,i);// 二进制字符串转化为十六进制字符串;strcpy(bs,"00000000000000000000010000000000");i=strtol(bs,&e,2);ltoa(i,h,16);sprintf(hs,"%08s",h);printf("bs=%s,hs=%s
",bs,hs);// 二进制字符串转化为十进制数;strcpy(bs,"00000000000000000000010000000000");i=strtol(bs,&e,2);printf("bs=%s,i=%d
",bs,i);// 十六进制字符串转成二进制串strcpy(hs,"00000400");sscanf(hs,"%x",&i);ltoa(i,b,2);sprintf(bs,"%032s",b);printf("hs=%s,bs=%s
",hs,bs);// ASCGBK字符串转十六进制串strcpy(s,"a汉");i=0;while (1) {if (0==s[i]) break;sprintf(hs+i*2,"%02X",(unsigned char)s[i]);i++;}setlocale(LC_ALL,"chs");printf("s=%s,hs=%s
",s,hs);
// 十六进制字符串转成汉字(GBK)及字符(ASC)strcpy(hs,"61BABA");i=0;while (1) {if (1!=sscanf(hs+i*2,"%2x",&v)) break;s[i]=(char)v;i++;}s[i]=0;printf("hs=%s,s=%s
",hs,s);return 0;}//i=1024,bs=00000000000000000000010000000000//i=1024,hs=00000400//hs=00000400,i=1024//bs=00000000000000000000010000000000,hs=00000400//bs=00000000000000000000010000000000,i=1024//hs=00000400,bs=00000000000000000000010000000000//s=a汉,hs=61BABA//hs=61BABA,s=a汉------解决方案--------------------#include <stdio.h>union decompose{int integer;struct{unsigned int hex0 : 4;unsigned int hex1 : 4;unsigned int hex2 : 4;unsigned int hex3 : 4;unsigned int hex4 : 4;unsigned int hex5 : 4;unsigned int hex6 : 4;unsigned int hex7 : 4;}hex4;};/* 此宏定义不能用于循环,即n不能是变量,只能是数字 * 因此比较适用与零散获取位状态或者字节状态 */#define GETHEX(x, n) (((union decompose){.integer = x}).hex4.hex##n) void test_getx(int tmp){printf("%X", GETHEX(tmp, 0));printf("%X", GETHEX(tmp, 1));printf("%X", GETHEX(tmp, 2));printf("%X", GETHEX(tmp, 3));printf("%X", GETHEX(tmp, 4));printf("%X", GETHEX(tmp, 5));printf("%X", GETHEX(tmp, 6));printf("%X
", GETHEX(tmp, 7));}int main(){test_getx(100);return 0;}