您好我尝试编写自己的htoi方法,将十六进制值转换为int值。
我陷入了困境。
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
int res = htoi2(argv[1]);
fprintf(stdout, "%s => %d\n", argv[1], res);
return 0;
}
int atoi2(char s[])
{
int i,n;
n=0;
for(i=0;s[i]>='0' && s[i]<='9';++i)
{
n=10*i+(s[i]-'0');
}
return n;
}
/*htoi(s)*/
int htoi2(char s[])
{
int i,n,len;
n=0;
len = strlen(s);
for(i=0; i<len; i++)
{
if(s[i]>='0' &&s[i]<='9')
{
n=16*n+(s[i]-'0');
}
else if(s[i]>='a'&&s[i]<='f')
{
n=16*n+(s[i]-'a')+10;
}
else if(s[i]>='A'&&s[i]<='F')
{
n=16*n+(s[i]-'A')+10;
}
}
return n;
}
它似乎应该有效,但它没有:(
有人在我写的代码中看到一些错误吗?
感谢您提前:)
问题已解决
/*working code*/
int main(int argc, char **argv)
{
char c[2];
c[0]='F';
c[1]='F';
int res = htoi2(c);
fprintf(stdout, "%d\n", res);
system("pause");
return 0;
}
int atoi2(char s[])
{
int i,n;
n=0;
for(i=0;s[i]>='0' && s[i]<='9';++i)
{
n=10*i+(s[i]-'0');
}
return n;
}
/*htoi(s)*/
int htoi2(char s[])
{
int i,n,len;
n=0;
len = strlen(s);
for(i=0; i<len; i++)
{
if(s[i]>='0' &&s[i]<='9')
{
n=16*n+(s[i]-'0');
}
else if(s[i]>='a'&&s[i]<='f')
{
n=16*n+(s[i]-'a')+10;
}
else if(s[i]>='A'&&s[i]<='F')
{
n=16*n+(s[i]-'A')+10;
}
}
return n;
}
感谢您的帮助:)
答案 0 :(得分:3)
你绕错了路。
len = strlen(s);
for(i=0; i<len; i++)
{
...
你的main
错了。 C
- 字符串需要以0结尾。如果你想“手动”初始化它,你可以这样做:
char c[3];
c[0]='1';
c[1]='1';
c[2]=0; // note: a real 0, not '0'
演示:
#include <stdio.h>
#include <string.h>
int htoi(char s[])
{
int i,n,len;
n=0;
len = strlen(s);
for(i=0; i<len; i++)
{
if(s[i]>='0' &&s[i]<='9')
{
n=16*n+(s[i]-'0');
}
else if(s[i]>='a'&&s[i]<='f')
{
n=16*n+(s[i]-'a')+10;
}
else if(s[i]>='A'&&s[i]<='F')
{
n=16*n+(s[i]-'A')+10;
}
}
return n;
}
int main(int argc, char **argv)
{
int res = htoi(argv[1]);
fprintf(stdout, "%s => %d\n", argv[1], res);
return 0;
}
的作用:
$ gcc -Wall -m64 -o t t.c
$ ./t 0
0 => 0
$ ./t 1
1 => 1
$ ./t a
a => 10
$ ./t f
f => 15
$ ./t 10
10 => 16
$ ./t 11
11 => 17
$ ./t 1a
1a => 26
$ ./t ff
ff => 255
答案 1 :(得分:0)
#include <stdio.h>
#include <string.h>
int htoi(char s[])
{
char *p = s;
char c;
int val =0;
while((c = *p++)) {
c = toupper(c);
val = (val << 4) | ((c>='0' && c<='9') ?
c-'0' :
(c>='A' && c <= 'F') ?
10+c-'A' : 0);
}
return val;
}