将Hex串,转换成对应的ASCII串的问题,谁能给我一个例子啊?

binue 2003-10-20 03:54:33
我现char*的如下hex串:
0x65 0x66 0x67 0x68……
或:
65 66 67 68……
等Hex串,我想将其转换成其十六进制值
对应的ASCII char*串,谁能帮我写一个函数啊?

由于小弟初学C++ ,写了一个问题多多,希望
那位大哥指教一下,小弟不盛感激,谢谢!!!!
...全文
80 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
binue 2003-10-21
  • 打赏
  • 举报
回复
fatwave(风中的雨)的函授数有很多缺陷,只考虑了理想情况,
如果其hex串带0x和空格的话,将得不到正确结果。
谢谢大家的指点。
binue 2003-10-20
  • 打赏
  • 举报
回复
我想的是将多个的连接在一起的十六进制串转换成其十六进制对应的ASCII串,
不要要将单个的十六进制串转换成对应的ASCII!!,
有没有好的办法啊!!
appleIIappleII 2003-10-20
  • 打赏
  • 举报
回复
StrToInt(你的字符串)即可
如你的字符串为0X65想去掉0x则可以用SubString()来完成,再用转StrToInt()
fatwave 2003-10-20
  • 打赏
  • 举报
回复
/*********************************进制转换**********************************/
//---------------------------------------------------------------------------
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;
}
huangjuliang 2003-10-20
  • 打赏
  • 举报
回复
0x65
就是十六进制值数呀!
huangjuliang 2003-10-20
  • 打赏
  • 举报
回复

Edit1->Text=StrToInt("0x65");//Edit1->Text=101;
yjy1001 2003-10-20
  • 打赏
  • 举报
回复
..........
就算是初学 也应该看懂fatwave(风中的雨) 的函数吧
fatwave 2003-10-20
  • 打赏
  • 举报
回复
"ba087d4012345678" -> {0xba, 0x08, 0x7d, 0x40, 0x12, 0x34, 0x56, 0x78}
{0xba, 0x08, 0x7d, 0x40, 0x12, 0x34, 0x56, 0x78} -> "ba087d4012345678"

不是写的很清楚了吗?

Behard 2003-10-20
  • 打赏
  • 举报
回复
现在就开始做作业了吗?

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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