程序如下:
int CTestDlg::strHexToInt(char *strSource)
{
int nTemp=0;
CString strTemp;
strTemp=strSource; for(char cc='G',dd='g'; cc<='Z',dd<='z'; cc++,dd++) //判断输入的字符串是否合法
{
if(strTemp.Find(cc,0) !=-1 || strTemp.Find(dd,0) !=-1)
{
::MessageBox(NULL,"请输入正确的16进制字符串!","输入错误",MB_ICONEXCLAMATION);
return -1;
}
}
for(int i = 0; i<strlen(strSource); i++)
{
int nDecNum;
switch(strSource) 问题出错在这里 {
case 'a':
case 'A': nDecNum = 10; break;
case 'b':
case 'B': nDecNum = 11; break;
case 'c':
case 'C': nDecNum = 12; break;
case 'd':
case 'D': nDecNum = 13; break;
case 'e':
case 'E': nDecNum = 14; break;
case 'f':
case 'F': nDecNum = 15; break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9': break;
default: return 0;
}
nTemp += nDecNum * (int)::pow(16,::strlen(strSource)-i -1);
}
return nTemp;}
希望大家多多帮助 我是新手 谢谢
int CTestDlg::strHexToInt(char *strSource)
{
int nTemp=0;
CString strTemp;
strTemp=strSource; for(char cc='G',dd='g'; cc<='Z',dd<='z'; cc++,dd++) //判断输入的字符串是否合法
{
if(strTemp.Find(cc,0) !=-1 || strTemp.Find(dd,0) !=-1)
{
::MessageBox(NULL,"请输入正确的16进制字符串!","输入错误",MB_ICONEXCLAMATION);
return -1;
}
}
for(int i = 0; i<strlen(strSource); i++)
{
int nDecNum;
switch(strSource) 问题出错在这里 {
case 'a':
case 'A': nDecNum = 10; break;
case 'b':
case 'B': nDecNum = 11; break;
case 'c':
case 'C': nDecNum = 12; break;
case 'd':
case 'D': nDecNum = 13; break;
case 'e':
case 'E': nDecNum = 14; break;
case 'f':
case 'F': nDecNum = 15; break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9': break;
default: return 0;
}
nTemp += nDecNum * (int)::pow(16,::strlen(strSource)-i -1);
}
return nTemp;}
希望大家多多帮助 我是新手 谢谢
因为char*没有大小先后顺序,LZ那个肯定不行的。
如果非要用,那么需要取出其中的值,然后再处理。
BYTE b_Tmp = *(strSource+i);
然后再使用
switch(b_Tmp ) 问题出错在这里 {
case 'a':
case 'A': nDecNum = 10; break;
case 'b':
case 'B': nDecNum = 11; break;
case 'c':
case 'C': nDecNum = 12; break;
case 'd':
case 'D': nDecNum = 13; break;
case 'e':
case 'E': nDecNum = 14; break;
case 'f':
case 'F': nDecNum = 15; break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9': break;
default: return 0;
}
一楼的大哥说了之后我发现了问题 ,但是你的方法貌似不行 我把char*强制付给了一个char型 问题解决 所以吧更多的分数给了 二楼的大哥
谢谢大家的帮助 !
其实大家的意思都差不多,
主要就是switch不接收字符串判断
''char是墨认为带符号的byte类型,其内部分存8位,比INT相差24位.