16,472
社区成员
发帖
与我相关
我的任务
分享
#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汉
1101001010100011
如果用32位int去存放它,那么最高位是1,表示他是负数,如果用64位的longlong去存放它,那么他是正数,因为最高位是0,所以你要根据一个字符串的16进制去转数字,你先要知道这个数是多少位的,比如你要转int 32那么可以这么做:
#include "stdafx.h"
#include "string.h"
int HexToInt32(const char* s)
{
int nRet = 0;
int nLen = strlen(s);
for(int x = 0; x < nLen; ++x)
{
int p = s[x];
switch(p)
{
case '0': p = 0x0; break;
case '1': p = 0x1; break;
case '2': p = 0x2; break;
case '3': p = 0x3; break;
case '4': p = 0x4; break;
case '5': p = 0x5; break;
case '6': p = 0x6; break;
case '7': p = 0x7; break;
case '8': p = 0x8; break;
case '9': p = 0x9; break;
case 'A': p = 0xA; break;
case 'B': p = 0xB; break;
case 'C': p = 0xC; break;
case 'D': p = 0xD; break;
case 'E': p = 0xE; break;
case 'F': p = 0xF; break;
}
int nShift = (nLen - 1 - x) * 4;
nRet |= p << nShift;
}
return nRet;
}
int _tmain(int argc, _TCHAR* argv[])
{
const char* strHex = "D2";
int n = HexToInt32(strHex);
printf("Hex:%s --> Dec:%d", strHex, n);
getchar();
return 0;
}
没用C的直接转换函数是为了展示整个转换过程,HexToInt32()这个函数要求16进制字符串必须为大写,你需要小写的判断可以再switch里面加