ASCII,HEX串转换问题……SOS。
我现有如下的Hex串:
0x69 0x2D 0x58 ……
或:
4C 6D 2F 3D ……
等不等长Hex串,请问题C/C++中有没有现成的函数将其转换成
ASCII串,如没有,请问题这个函数该怎么写?
问题点数:20、回复次数:10Top
1 楼zihan(子寒)回复于 2003-10-04 12:31:34 得分 1
没有,自己解析了。解析成一个个的16进制,然后转换。Top
2 楼binue()回复于 2003-10-04 15:35:02 得分 1
upTop
3 楼pheavecn(C超)回复于 2003-10-07 11:26:03 得分 1
IntToHex可以转成16进制。
IntToStr转成10进制。Top
4 楼FallenAngel(发愣的安琪儿)回复于 2003-10-07 17:01:22 得分 1
不懂,你的0x69 0x2D 0x58 ……
或:
4C 6D 2F 3D ……
是字符串呢还是就是一个一个单独的HexTop
5 楼sinth(Solitray Wolf)回复于 2003-10-07 20:13:02 得分 0
字符串,有什么好的办法吗?Top
6 楼ljianq(泉深水清)回复于 2003-10-08 08:40:23 得分 1
一、 int m=0x2D;
Edit1->Text=m; //Edit1->Text="45";
二、 Edit1->Text=StrToInt("0x2D");//Edit1->Text="45";Top
7 楼sinth(Solitray Wolf)回复于 2003-10-20 03:44:12 得分 0
upTop
8 楼fatwave(风中的雨)回复于 2003-10-20 09:08:17 得分 15
/*********************************进制转换**********************************/
//---------------------------------------------------------------------------
int communication::HtoD(unsigned char *hex_str, unsigned char *bin_str)
/*
"ba087d4012345678" -> {0xba, 0x08, 0x7d, 0x40, 0x12, 0x34, 0x56, 0x78}
For ASCII string and OS, not for EBCDIC string and OS.
Return: > 0 --- bin_str length
< 0 --- error
M.L.Y 1999.12.28
*/
{
int i, j, n;
int c1, h1, h2;
unsigned char *sh = hex_str, *sb = bin_str;
n = strlen(sh);
if(n < 2) return -1;
if(n % 2 != 0) return -2;
for(i = 0, j = 0; i < n; j++)
{
if((h1 = hex_to_num(sh[i++])) < 0) return -1;
if((h2 = hex_to_num(sh[i++])) < 0) return -1;
c1 = h1 << 4 | h2;
sb[j] = c1;
}
return j;
}
//---------------------------------------------------------------------------
int communication::DtoH(unsigned char *bin_str, int len, unsigned char *hex_str)
/*
{0xba, 0x08, 0x7d, 0x40, 0x12, 0x34, 0x56, 0x78} -> "ba087d4012345678"
For ASCII string and OS, not for EBCDIC string and OS.
Return: > 0 --- hex_str length
< 0 --- error
M.L.Y 1999.12.28
#include <stdio.h> 标准库
*/
{
int i, j;
unsigned char *sb = bin_str, *sh = hex_str;
for(i = 0, j = 0; i < len; i++, j+=2)
sprintf((char *)sh+j, "%02X", sb[i]);
sh[j] = NULL;
return j;
}
//---------------------------------------------------------------------------
int communication::hex_to_num(char hex1char)
/*
'a' or 'A' -> 10, '1' -> 1
If hex1char not in '0'-'9','A'-'F','a'-'f' return -1
*/
{
if(hex1char >= '0' && hex1char <= '9') return hex1char - '0';
if(hex1char >= 'A' && hex1char <= 'F') return hex1char - 'A' + 10;
if(hex1char >= 'a' && hex1char <= 'f') return hex1char - 'a' + 10;
return -1;
}
Top
9 楼sinth(Solitray Wolf)回复于 2003-10-26 05:27:10 得分 0
楼主的这个弱智一点,如果中间有空格,0x的话将得不到正确结果,
我自己写了一个,可能运行效率有一点低,谁能帮我优化一下,谢了!!
String HexToStr(String hs){//转换HEX串到ASCII串
String hst=" xX",t1,t2;
String hst1="1234567890abcdefABCDEF";
hs=Trim(hs);
char ch;
for(int i=1;i<=hs.Length();i++){
if(hs.SubString(i,2)=="0x"||hs.SubString(i,2)=="0X")//如果为0x
{t1=hs.SubString(i,2);i=i+1;continue;} //则进入下次循环
if(hst1.Pos(hs.SubString(i,1))!=0)//标准HEX数则连接
{
t1=t1+hs.SubString(i,1);}
else
{if(hst.Pos(hs.SubString(i+1,1))!=0)//如果下一位还是
{t1=t1+hs.SubString(i,1);continue;}//分隔符则继续连接
if(hst.Pos(hs.SubString(i,1))!=0)//分隔标志则构造目标串
{ch=strtol(t1.c_str(),NULL,16);
t2=t2+ch;
t1="";}
else//否则其它符号则返回NULL
return NULL;
}
}
ch=strtol(t1.c_str(),NULL,16);
t2=t2+ch;
return t2;
}Top
10 楼sinth(Solitray Wolf)回复于 2003-10-27 06:46:27 得分 0
没人帮忙算了,结帐!Top



