如何将字符串转换为16进制数值

有1个数组 char a[2]
a[0]='e',a[1]='9', ,假记为a[2] = "e9"
十六进制数 e9 等于十进制数 233
如何将这个数组转换为十六进制 e9 或者十进制数 233
我自己后来想出来了:
if(z[0]>='0' && z[0] <='9')
x = (int)z[0] - 48;
else
if(z[0] >='A' && z[0] <= 'Z')
x=(int)z[0] - 55;
else
{
perror("http address string wrong");
exit(0);
}
printf("x====>%d ",x);

if(z[1]>='0' && z[1] <='9')
y = (int)z[1] - 48;
else
if(z[1] >='A' && z[1] <= 'Z')
y=(int)z[1] - 55;
else
{
perror("http address string wrong");
exit(0);
}
大概就只这样

第1个回答  2008-09-17
举个例子:233转变成e9
233/16 = 14 余数为9
14的十六进制为e,9的十六进制还是9,所以转换结果为e9.
也就是说:如果相除的结果小于1,则结果是多少就直接转换
如果结果在1和15之间,则转换后的结果如本例所示.
依此类推.

再举个例子:143转变成e9
143/16 = 8 余数为15
8的十六进制还是8,15的十六进制是f,所以转换结果为8f.
第2个回答  2008-09-17
看你想翻译多长的十六进制,太长的方法是比较复杂的。短的(8位及以下),我可以给你一点建议,每个十六进制位控制4个bit,你可以从低到高,赋值给一个int型的数,结果就出来了。
第3个回答  2008-09-17
int char2int(char a[2])
{
int a,b;
if (a[0]>='0' && a[0]<='9') a=a[0]-'0';
else if(a[0]>='a' && a[0]<='f')) a=a[0]-'a'+10;
else if(a[0]>='A' && a[0]<='F')) a=a[0]-'A'+10;
else return -1;
if (a[1]>='0' && a[1]<='9') b=a[1]-'0';
else if(a[1]>='a' && a[1]<='f')) b=a[1]-'a'+10;
else if(a[1]>='A' && a[1]<='F')) b=a[1]-'A'+10;
else return -1;

return a*16+b;
}本回答被提问者采纳