16进制字符串转换为整形

super晓 2014-06-26 05:51:34
下面程序是将16进制字符串转换为整形 每相连的2个字符为一个字节

例如“01” = 1 ;“25”=37;“0105”=21;

以下为程序不知道错在哪

#include<stdio.h>
#include<stdlib.h>

int getDint(unsigned char c)
{
if(c > 47 && c < 58)
{
return c - 48;
}
else if( (c >64 && c<71) || (c >96 && c <103))
{
unsigned char ctmp = toupper(c);
switch(ctmp)
{
case 'A':return 10;
case 'B':return 11;
case 'C':return 12;
case 'D':return 13;
case 'E':return 14;
case 'F':return 15;
}
}
else
{
return -1;
}
}

int DexToInt(char*str,int len)
{
int res =0;
for(int i = 0; i<len; i+=2)
{
res +=(getDint(str[i])<<4+getDint(str[i+1]))<<(len-2-i/2)*8;
}
return res;
}

int main(){


char a[5]="0105";
int r = DexToInt(a,4);
printf("%d\n",r);
return 0;
}
...全文
463 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
super晓 2014-09-30
  • 打赏
  • 举报
回复
4楼写的不错。。比较全面。。问题已解决谢谢
ningto.com 2014-06-27
  • 打赏
  • 举报
回复

int DexToInt(char*str,int len)
{
	int res =0;
	for(int i = 0; i<len; i++)
	{
		int num = 1;
		for (int j=i+1; j<len; j++) {
			num *= 16;
		}
		res += getDint(str[i]) * num;
	}
	return res;
}
jamesguo37 2014-06-27
  • 打赏
  • 举报
回复
strtol()
赵4老师 2014-06-27
  • 打赏
  • 举报
回复
#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汉
iaccepted 2014-06-26
  • 打赏
  • 举报
回复
%x可以,不过现在新的C++11出了stoi函数,你可以看看,各种进制转整形都很方便,已经纳入标准库了
  • 打赏
  • 举报
回复
这样就可以

int iH
char *pcHex= "ABCD";
sscanf(pcHex, "%x", &iH);
printf("%d\n", iH);

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧