回 帖 发 新 帖 刷新版面

主题:16进制转换为10进制

哪里错了啊
求救
#include"stdio.h"
main()
{ char s[10];
  unsigned long n,htod();
  gets(s);
  n=htod(s);
  printf("%u\n",n);
}
unsigned long htod(char *s)
{ int i=0,x;unsigned long r=0;char c;
  while(s[i]!='\0') i++;
  x=i-1;   
  for(i=0;i<=x/2;i++)
     { c=s[i];
       s[i]=s[x-i];
       s[x-i]=c;
      }
  if((*s)<='F'&&(*s)>='A'&&*(s+1)!='\0')
      r=htod(*(s+1))*16+(*s)-55;
  else if(*(s+1)!='\0')
      r=htod(*(s+1))*16+(*s)-48;
  return (r);
}

回复列表 (共13个回复)

11 楼

[quote]发一个同样功能的函数

[code=c]
unsigned long htod(char *s )
    {
    char          ch ;
    char         *ps   = s ;
    int           flag = 1 ; 
    unsigned long r = 0UL  ;
    
    if ( !s ) return -1UL  ;
    
    for  ( --ps; *++ps==' ' || *ps=='0' ; )     ;//忽略 空格和0
    if   ( *ps=='X' ||  * ps   =='x' )
         if ( ps!=s &&  *(ps-1)=='0' )   ++ps   ;//忽略 0x和0X
         else  return   -1UL ;
    for  ( --ps; *++ps==' ' || *ps=='0' ; )     ;//忽略 空格和0
    
    for  (  --ps; ch=*++ps ;  )
         {
         '0'<=ch && ch<='9' ? r = (r<<4) + ch-'0'    :
         'A'<=ch && ch<='F' ? r = (r<<4) + ch-'A'+10 :
         'a'<=ch && ch<='f' ? r = (r<<4) + ch-'a'+10 :
                           flag = 0 ;
         if ( !flag )   return -1UL ;
         }//for --ps...  
    return r ;
    }
[/code][/quote]
这个非常像当初的豪杰风格:)

12 楼

给楼主一个最简单的办法之一吧:
[code=c]
unsigned long htol(char *hex)
{
    unsigned long lgs;
    sscanf(hex,"%x",&lgs);
    return lgs;
}
[/code]

13 楼

一脸的茫然
俺不懂]

我来回复

您尚未登录,请登录后再回复。点此登录或注册