导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

数据转换(十六进制的串转换成十进制的数)再取后四位有效位

lxyshenyou 2009-07-26 04:09:37

如题:要将一个串“f32e”转换成十进制的数
尝试用_ttoi("f32e")来转换 发现串中只要出现字母转换出来的就是0;

求高手说两句
...全文
56 点赞 收藏 4
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
huziwu 2009-07-27
够麻烦的,下面是我的代码:
int StrXToInt(CString StrX)
{
if (StrX.IsEmpty())
{
return 0;
}
int len=lstrlen(StrX);
int ret=0;
int ind;
for (int i=0;i<len;i++)
{
ind=len-1-i;
if ((StrX[ind]>='A' && StrX[ind]<='F'))
{
ret+=(StrX[ind]-'A'+10)*((int)pow(16,i));
}
else if((StrX[ind]>='a' && StrX[ind]<='f'))
{
ret+=(StrX[ind]-'a'+10)*((int)pow(16,i));
}
else if (StrX[ind]>='0' && StrX[ind]<='9')
{
ret+=(StrX[ind]-'0')*((int)pow(16,i));
}
else
break;
}
return ret;
}
回复
lxyshenyou 2009-07-27
多谢 找到方法了下面贴出代码如下供大家学习
方法一:

char fr[5];
ULONG intfr=strtoul(fr,NULL,16);


方法二:自己写一个转换的函数 StrToData(CString ,int);
#include "StdAfx.h"
#include "StrToData.h"
long npf(int d,int n)
{
int i;
long m=1;
for(i=0;i<n;i++)
m*=d;
return m;
}
BOOL isRightData(char c,int jz)
{
if((jz<2)||(jz>16))
return FALSE;
char ch[]="00112233445566778899aAbBcCdDeEfF";
int i=0;
for(i=0;i<jz;i++)
{
if(c==ch[i*2])return TRUE;
if(c==ch[i*2+1])return TRUE;
}
return FALSE;
}
long StrToData(CString strData,int jz)
{
int l=strData.GetLength();
long IntValue=0;
int bitValue;
int i;
for(i=0;i<l;i++)
{
if(isRightData(strData[i],jz))
{
if(isdigit(strData[i]))
bitValue=strData[i]-0x30;
else
{
switch(strData[i])
{
case 'a':
bitValue=0x0a;
break;
case 'b':
bitValue=0x0b;
break;
case 'c':
bitValue=0x0c;
break;
case 'd':
bitValue=0x0d;
break;
case 'e':
bitValue=0x0e;
break;
case 'f':
bitValue=0x0f;
break;
case 'A':
bitValue=0x0a;
break;
case 'B':
bitValue=0x0b;
break;
case 'C':
bitValue=0x0c;
break;
case 'D':
bitValue=0x0d;
break;
case 'E':
bitValue=0x0e;
break;
case 'F':
bitValue=0x0f;
break;
}
}
IntValue=bitValue*npf(jz,l-i-1)+IntValue;
}
else
return -1;
}
return IntValue;
}
回复
schlafenhamster 2009-07-26
atoi只能是“1到9”,16进制要自己搞。
//
//
int HexValue(unsigned char a)
{
a -= 48;
if(a > 9 ) a -= 7;
return a;
}
//使用:
int adr=HexValue(szBuffer[0])*65536+HexValue(szBuffer[1])*4096+
HexValue(szBuffer[2])*256+HexValue(szBuffer[3])*16+HexValue(szBuffer[4]);
回复
lxyshenyou 2009-07-26
有没有人才能解答下下!!!
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……