#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\n",i,bs); // 十进制整数转十六进制串; i=1024; ltoa(i,h,16); sprintf(hs,"%08s",h); printf("i=%d,hs=%s\n",i,hs); // 十六进制字符串转成十进制数 strcpy(hs,"00000400"); sscanf(hs,"%x",&i); printf("hs=%s,i=%d\n",hs,i); // 二进制字符串转化为十六进制字符串; strcpy(bs,"00000000000000000000010000000000"); i=strtol(bs,&e,2); ltoa(i,h,16); sprintf(hs,"%08s",h); printf("bs=%s,hs=%s\n",bs,hs); // 二进制字符串转化为十进制数; strcpy(bs,"00000000000000000000010000000000"); i=strtol(bs,&e,2); printf("bs=%s,i=%d\n",bs,i); // 十六进制字符串转成二进制串 strcpy(hs,"00000400"); sscanf(hs,"%x",&i); ltoa(i,b,2); sprintf(bs,"%032s",b); printf("hs=%s,bs=%s\n",hs,bs); // ASC\GBK字符串转十六进制串 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\n",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\n",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\n", GETHEX(tmp, 7)); } int main() { test_getx(100); return 0; }
MFC 16进制转2进制
16 转到10
//16转10进制 int CCIecClientSimulator12Dlg::HexToDec( char *s ) { char *p = s; //空串返回0。 if(*p == ‘\0‘) return 0; //忽略开头的‘0‘字符 while(*p == ‘0‘) p++; int dec = 0; char c; //循环直到字符串结束。 while(c = *p++) { //dec乘16 dec <<= 4; //数字字符。 if(c >= ‘0‘ && c <= ‘9‘) { dec += c - ‘0‘; continue; } //小写abcdef。 if(c >= ‘a‘ && c <= ‘f‘) { dec += c - ‘a‘ + 10; continue; } //大写ABCDEF。 if(c >= ‘A‘ && c <= ‘F‘) { dec += c - ‘A‘ + 10; continue; } //没有从任何一个if语句中结束,说明遇到了非法字符。 return -1; } //正常结束循环,返回10进制整数值。 return dec; }
UINT CCIecClientSimulator12Dlg::to2( int n ) { int r=0; //double r=0; double b =10; int shang,yushu; shang=n; int i=0; while(shang!=0) { yushu=shang%2; r=r+pow(b,i)*yushu; i++; shang=shang/2; } return r; }
十进制转换成十六进制、16进制转2进制,码迷,mamicode.com
原文地址:http://blog.csdn.net/u010236550/article/details/24694157