我都搞胡涂了,str2hex,顾名思义是将字符窜转化为16进制,很绕人!!

shaxiren 2003-08-20 03:34:59
//字符串转化为hex码对应的字符串,如把"31323334"转化为"1234"(0x31,0x32,0x33,0x34)
int str2hex(unsigned char *read, unsigned char *write, int len);

============================================================

//hex码对应的字符串转化为字符串,如把(0x32,0x1A)转化为"321A"
void hex2str(unsigned char *read, unsigned char **write, int len);

高手分析分析
...全文
722 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
nianll 2003-08-20
  • 打赏
  • 举报
回复
BOOL str2hex(char* pInput, unsigned char* pOutput, int* len)
{
char c1, c2;
int i;
if(strlen(pInput)%2) //输入长度必须为偶数,
return FALSE;
strupr(pInput); //全部转为大写字母为了处理方便
for(i = 0; i< strlen(pInput)/2; i++)
{
c1 = pInput[2*i];
c2 = pInput[2*i+1];
if(c1<'0' || (c1 > '9' && c1 <'A') || c1 > 'F') //输入数据不符合要求
return FALSE;
if(c2<'0' || (c2 > '9' && c2 <'A') || c2 > 'F') //输入数据不符合要求
return FALSE;
c1 = c1>'9' ? c1-'a'+10 : c1 -'0'; 两个字符拼成一个字节的16进制数
c2 = c2>'9' ? c2-'a'+10 : c2 -'0';
pOutput[i] = c1<<4 | c2;
}
*len = i;
return TRUE;
}

以上代码没有调试过(现写的),
idontlikenickname 2003-08-20
  • 打赏
  • 举报
回复


// 使用举例:
// char numstr[] = { "12345" }; 含有五个字符.
// char hexstr[16];
// hex2str(numstr, hexstr, 5);
void hex2str(char *pInput, char *pOutput, int nStrLen)
{
char szNum[3];
int nNum, nIndex;

// 保证长度符合要求.
nStrLen = min(strlen(pInput), nStrlen);
// 逐个转换.
for(nIndex = 0; nIndex < nStrLen; nIndex ++)
{
nAscii = *(pInput + nIndex);
itoa(nAscii, szNum, 16);
memcpy(pOutput + nIndex * 2, szNum, 2);
}
// 如果你要求输出字符串是以'\0'结尾的(便于打印输出),就加上下边这句.
// *(pOutput + nIndex * 2) = '\0';
}

PS:头文件加上stdlib.h,memory.h~~

idontlikenickname 2003-08-20
  • 打赏
  • 举报
回复


// 使用举例:
// char hexstr[] = { "31323334" }; 含有四个十六进制数字,每个占两个字符.
// char numstr[8];
// str2hex(hexstr, numstr, 4);
void str2hex(char *pInput, char *pOutput, int nHexNum)
{
char szNum[3];
int nAscii, nIndex;

// 保证输入字符串的长度和指定含有十六进制数字的个数符合要求.
nHexNum = min(strlen(pInput) >> 1, nHexNum);
// 初始化临时字符数组.
memset(szNum, 0, 3);
// 读取每个十六进制数字的字符串,并转换.
for(nIndex = 0; nIndex < nHexNum; nIndex ++)
{
memcpy(szNum, pInput + nIndex * 2, 2);
nAscii = atoi(szNum);
*(pOutput + nIndex) = (char)nAscii;
}
}

nirvana_li 2003-08-20
  • 打赏
  • 举报
回复
分析什么?搞不懂楼主的意思,还是帮你UP一下吧……

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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