把一个十六进制的字符串(包含0x或0X)转化成对应的数值 ASCII码

https://88.wendadaohang.com/zd/M1aaVK1BS.html

编写一个函数htoi(s),把一个十六进制的字符串(包含0x或0X)转化成对应的数值,并在主函数中调用该函数进行验证
貌似不怎么行啊?那个CString是什么意思?

#include <iostream> //#include <stdio.h>
#include <afx.h>

int ChangeNum(CString str,int length) //C把CString改成指针
{
char revstr[16]={0}; //根据十六进制字符串的长度,这里注意数组不要越界
int num[16]={0};
int count=1;
int result=0;
strcpy(revstr,str);
for (int i=length-1;i>=0;i--) //这里是关键的变换程序
{
if ((revstr[i]>='0') && (revstr[i]<='9'))
num[i]=revstr[i]-48;//字符0的ASCII值为48
else if ((revstr[i]>='a') && (revstr[i]<='f'))
num[i]=revstr[i]-'a'+10;
else if ((revstr[i]>='A') && (revstr[i]<='F'))
num[i]=revstr[i]-'A'+10;
else
num[i]=0;
result=result+num[i]*count;
count=count*16;//十六进制(如果是八进制就在这里乘以8)
}
return result;
}

int main()
{
CString str="0x11";
int n=0;
n=ChangeNum(str,str.GetLength()); //str.GetLength()用scanf()
printf("%d ",n);
return 0;
}
/*输出:
17
*/

参考资料: http://fiona1011.javaeye.com/blog/634541

来自:求助得到的回答
原文地址:https://www.cnblogs.com/sunny3158/p/14594083.html