求:在MFC中十六进制的字符串怎么样才能转变成整型呢?

willhuang_78 2006-09-28 07:44:36
比如“0x015f6523”
用什么方法可以转化为整型值0x015f6523 呢?


在线等
...全文
147 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
liusi20000 2010-06-01
  • 打赏
  • 举报
回复
CString str= "0x015f6523 ";
char *stopstr= " ";
unsigned long ul=strtoul(str,&stopstr,16);


谢谢 很有用
eshepirlo 2006-09-28
  • 打赏
  • 举报
回复
#include <stdlib.h>
#include <stdio.h>
#include "math.h"

void main( void )
{
char *s; int result=0;

s = "0x015f6523"; /* Test of atof */
int i=0;
while(*(s+i)!=0)
{
i++;
}
int Num=i;
int y;
for (i=0;i<Num;i++)
{
if ((*(s+i)>=48)&(*(s+i)<=57))
{y=*(s+i)-48;
result+=pow(16,Num-i-1)*y;}
else if ((*(s+i)>=97)&(*(s+i)<=102))
{y=*(s+i)-87;
result+=pow(16,Num-i-1)*y;}
else
result+=0;
}

printf( "atof test: ASCII string: %s\t int: %x \n", s, result );

}
hanjk 2006-09-28
  • 打赏
  • 举报
回复
CString str="0x015f6523";
char *stopstr="";
unsigned long ul=strtoul(str,&stopstr,16);
youngwolf 2006-09-28
  • 打赏
  • 举报
回复
算了,这有个更好的,刚找到,也是我运行好久了的程序:
BOOL CLocalConfigDlg::HexStringToBinary(PUINT pRe, LPCTSTR pHexString, int Len/*= 8*/)
{
ASSERT(pRe && Len > 0 && Len < 9);

UINT re = 0;
for (int i = 0; i < Len; i++)
{
BYTE Base = '0', Exten = 10;
if (isdigit(pHexString[i]))
Exten = 0;
else if ('A' <= pHexString[i] && pHexString[i] <= 'F')
Base = 'A';
else if ('a' <= pHexString[i] && pHexString[i] <= 'f')
Base = 'a';
else
return FALSE;

re |= (pHexString[i] - Base + Exten) << (Len - 1 - i) * 4;
}

*pRe = re;
return TRUE;
}

Len是长度,你可以用它来取某些字段,所以本函数并不是计算到字符串末尾。
youngwolf 2006-09-28
  • 打赏
  • 举报
回复
把re |= (pHexString[i] - Base + Exten) << (3 - i) * 4;
还要改成:
re |= (pHexString[i] - Base + Exten) << (7 - i) * 4;
自己在不够8个字符时在前面补0。
youngwolf 2006-09-28
  • 打赏
  • 举报
回复
下面的程序在我一个工程中使用,可以使用,但只能转换双字节型,你改一下:
WORD CElectroMonitorDlg::HexStringToBinary(LPCTSTR pHexString)
{
WORD re = 0;
for (int i = 0; i < 4; i++)
{
BYTE Base = '0', Exten = 10;
if (isdigit(pHexString[i]))
Exten = 0;
else if ('A' <= pHexString[i] && pHexString[i] <= 'F')
Base = 'A';
else if ('a' <= pHexString[i] && pHexString[i] <= 'f')
Base = 'a';
else
break;

re |= (pHexString[i] - Base + Exten) << (3 - i) * 4;
}

return re;
}

把WORD改为UINT,把for (int i = 0; i < 4; i++)
改为for (int i = 0; i < 8; i++)

注意你自己去掉空格等,还有0x,然后再调用本函数。
Snow_Ice11111 2006-09-28
  • 打赏
  • 举报
回复
Sorry,回复得太快了,atoi不能转换16进制的。
Snow_Ice11111 2006-09-28
  • 打赏
  • 举报
回复
atoi()函数

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧