小众知识

首页 > 正文

各位大侠帮帮忙!!C/C++中要把一个十六进制字符串,转换成十进制数怎么办?

ss="BC5161"
该字符串在C语言中,首先要将它当成一个十六进制数,然后转换成十进制数;
该数转换出来以后应该是12345681。
在C中可以用
int sscanf( const char *buffer, const char *format [, argument ] ... );
但是只能转换成int型的数,现在转换后是一个long型的数,怎么办呢??

我试了一下:
long decdata;
ss="BC6151";

sscanf(ss,"%x",&decdata);
结果:decdata=24913;(只将"6151"那部分转换成了十进制)
 

 daizh 发表于:2003-11-17 11:38:26
得分:0 

在vc6.0++环境下没有问题。 

 diyar791004 发表于:2003-11-17 13:29:43
得分:0 

可现在是用的BORLAND C3.1 

 rerli 发表于:2003-11-17 14:16:58
得分:0 

long h_to_d(char *s)

long n=0;
/*
写法一:
int i; 
for (i=0; s[i]!='\0'; i++)
{
if (s[i]>='0' && s[i]<='9')
{
n = n*16+s[i]-'0';
}

if (s[i]>='a' && s[i]<='f')
{
n = n*16+s[i]-'a'+10;
}

if (s[i]>='A' && s[i]<='F')
{
n = n*16+s[i]-'A'+10;
}
}*/
/*写法二*/
while (*s!='\0')
{
if (*s>='0' && *s<='9')
{
n = n*16+(*s)-'0';
}

if (*s>='a' && *s<='f')
{
n = n*16+(*s)-'a'+10;
}

if (*s>='A' && *s<='F')
{
n = n*16+(*s)-'A'+10;
}
s++;
}

return n;
}


main()
{
static char *s = "BC5161";
long num;

num = h_to_d(s);

    printf("%ld",num);

    printf("\n");
system("pause");
}

 suisuibianbian 发表于:2003-11-17 14:30:23
得分:0 

dev-c++ 没问题 

 sgaosslotus 发表于:2003-11-19 00:07:06
得分:0 

上面的程序应该没有问题,就是这么解决的。顺便再搭送一个二进制字符串转十进制数的:
long b_to_h(*s)
{
  long num=0;
  int i; 
  for (i=0;s[i]!='/0';i++)
    if s[i]=='1' 
      num=num*2+1;
  return num;
}

 xdspower 发表于:2003-11-19 09:01:22
得分:0 

rerli(Brooks) 没有考虑非法数据,我写一个,按方法一写

long h_to_d(char *s)

long n=0;
int i; 
for (i=0; s[i]!='\0'; i++)
{
             switch (s[i]){
                    case  '0':
                    case  '1':
                    case  '2':
                    case  '3':
                    case  '4':
                    case  '5':
                    case  '6':
                    case  '7':
                    case  '8':
                    case  '9':n = n*16+s[i]-'0';break;
                    case  'a':
                    case  'b':
                    case  'c':
                    case  'd':
                    case  'e':
                    case  'f':n = n*16+s[i]-'a'+10;break;
                    case  'A':
                    case  'B':
                    case  'C':
                    case  'D':
                    case  'E':
                    case  'F':n = n*16+s[i]-'A'+10;break;
                    default:printf("Err in h_to_d,S isn't a Hex");exit(0);
                    }

          }
          return n; 

 Aydge 发表于:2003-11-19 09:51:19
得分:0 

^_^,和我的问题差不多哈

我有更好的方法哈
long idata;
char *ss="str";
idata=*(unsigned long*)ss;
printf("%x",idata);


 arfi 发表于:2003-11-19 10:07:15
得分:0 

sscanf(ss,"%ld",&decdata);这样应该就可以了吧。 

 arfi 发表于:2003-11-19 10:12:50
得分:0 

写错了,应该是sscanf(ss,"%lx",&decdata); 

 ajsword 发表于:2003-11-19 10:17:13
得分:0 

char *ss = "bd2342";
int idata;
idata = strtol( ss, NULL, 16); 

上一篇:问个简单的问题!!
下一篇:template模板操作

分享到: