如何把十六进制字串转换为对应的字符串?

cnepine 2005-05-16 09:03:51
如题.

谢谢.
...全文
249 14 打赏 收藏 举报
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xgwx 2005-07-01
学习
  • 打赏
  • 举报
回复
senses1 2005-05-16
-_-!
调用汉字字库?
  • 打赏
  • 举报
回复
cnepine 2005-05-16
比如我要输入的十六进制串为"B8F1B6FBC4BE0000"
则输出"格尔木", 如何做到.
  • 打赏
  • 举报
回复
horisly 2005-05-16
都是厉害的,本来想贴我以前的程序,我看还是算了。
  • 打赏
  • 举报
回复
xhzxlqt 2005-05-16
CString CADOWriteDlg::HexToStr(CString str)//输入参数为一个字符的2个16进制代码,如"D3"
{
ASSERT(2==str.GetLength());
unsigned char ch[2];
unsigned char retval;
strcpy((char*)ch,str);
if(ch[0]>='0'&&ch[0]<='9')
retval=(ch[0]-'0')*16;
else if(ch[0]>='A'&&ch[0]<='F')
retval=(ch[0]-'A'+10)*16;

if(ch[1]>='0'&&ch[1]<='9')
retval+=ch[1]-'0';
else if(ch[1]>='A'&&ch[1]<='F')
retval+=ch[1]-'A'+10;
char tempch[10];
itoa(retval,tempch,10);

CString retstr;
retstr.Format("%c",retval);
return retstr;
}
  • 打赏
  • 举报
回复
handwolf 2005-05-16
如果是我说的把十六进制字串转换为对应的十进制字符串.

那么如下进行是很方便的!
CString str16("FF");
char chs10[128];
int iData;
sscanf(str16.GetBuffer(m_1.GetLength()),"%x",&iData);
sprintf(chs10,"%d",iData);
  • 打赏
  • 举报
回复
柯本 2005-05-16
字符串转为字符串?
十六进制字串转为值:
long strtol( const char *nptr, char **endptr, int base ); 其中base=16
值转为十六进制字串
char *_itoa( int value, char *string, int radix );其中radix=16

sprintf(buff,"%x",val);
  • 打赏
  • 举报
回复
handwolf 2005-05-16
是否是:
  如何把十六进制字串转换为对应的十进制字符串?
  • 打赏
  • 举报
回复
xhzxlqt 2005-05-16
我的代码就是你说的功能呀,我正用得好好的呢
  • 打赏
  • 举报
回复
peibosys 2005-05-16
To vcmute(横秋):
如果字串超长,在转换前后用GetTickCount()记一下时间,就知道sscanf之类的格式化字串函数有多么慢了;
  • 打赏
  • 举报
回复
sutra 2005-05-16
int n ;
sscanf( input, "%x", &n ) ;
sprintf( output, "%d", n ) ;
  • 打赏
  • 举报
回复
vcmute 2005-05-16
char s[]="B8F1B6FBC4BE0000";
char r[MAX_LEN]={0};
for(int i=0;i<strlen(s);i+=2)
sscanf(s+i,"%2X",r+i/2);
  • 打赏
  • 举报
回复
peibosys 2005-05-16
你这种情况调用库函数不明智,主要是速度
帮你写个吧,按我看来已经不能再快了
用法
char s[]="B8F1B6FBC4BE0000";
int i=MyHex(s);
MessageBox(0,s,0,MB_OK);
试试吧

int MyHex(char* s)
{
byte a,b;
int i;
char* p=s;
for(i=0;*s!=0;i++)
{
a=*s;
if(a>0x29 && a<0x3A)//'0'-'9'
a-=0x30;
else if(a>0x40 && a<0x47)//'A'-'F'
a-=0x37;
else if(a>0x60 && a<0x67)//'a'-'f'
a-=0x57;
else //error
break;
s++;
b=*s;
if(b>0x29 && b<0x3A)//'0'-'9'
b-=0x30;
else if(b>0x40 && b<0x47)//'A'-'F'
b-=0x37;
else if(b>0x60 && b<0x67)//'a'-'f'
b-=0x57;
else //error
break;
p[i]=(a<<4) | b;
s++;
}
p[i]=0;
return i;
}
  • 打赏
  • 举报
回复
handwolf 2005-05-16
给你一个指引,通过类似的方法可以解决你的问题 CString str16("B8F1B6FBC4BE");
char chs10[128];

int iData1,iData2,iData3,iData4,iData5,iData6;

sscanf(str16.GetBuffer(m_1.GetLength()),"%2x%2x%2x%2x%2x%2x",&iData1,&iData2,&iData3,&iData4,&iData5,&iData6);

sprintf(chs10,"%c%c%c%c%c%c",iData1,iData2,iData3,iData4,iData5,iData6);
  • 打赏
  • 举报
回复
相关推荐
发帖
VC/MFC
加入

1.6w+

社区成员

VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
申请成为版主
帖子事件
创建了帖子
2005-05-16 09:03
社区公告

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