gpt4 book ai didi

将十六进制值转换为 int 自定义 atoi 方法

转载 作者:太空宇宙 更新时间:2023-11-04 02:15:49 24 4
gpt4 key购买 nike

你好,我尝试编写自己的 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;
}

感谢您的帮助:)

最佳答案

你绕错了方向。

    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

关于将十六进制值转换为 int 自定义 atoi 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7865480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com