两道算法题

llf_hust 2005-12-26 07:52:19
1。/* 将一个十六进制字节串转换成 ASCII 码表示的字符串;
unsigned char *pHex -- 十六进制数字节串首地址;
unsigned char *pASSCHex -- 转换后的 ASCII 码表示的字符串的首地址;
int nLen -- 要转换的十六进制数的长度(字节数)。
注: 转换后的结果全部是大写 ASSC 表示的十六进制数;
程序中不对 pHex 和 pASSCHex 的合法性进行检查;
也不对数组越界进行检查。
sample: "\x11\x22\x44\x66"->"11224466" nlen=4
*/
void AC_decl HexToAscii(unsigned char * pHex, unsigned char * pASSCHex, int nLen);
2。
////////////////////////////////////////////////////////////////////////////////////////////
// 功能: 将一个 ASSC 码表示的十六进制字符串转换成十六进制的字节串;
// 输入参数: pAscii -- 转换后的 ASCII 码表示的十六进制字符串的首地址;
// pHex -- 十六进制数字节串首地址;
// nLen -- 要转换的 ASCII 码表示的十六进制字符串的长度(字节数)。
// 输出参数: 空。
// 注: 要求输入的 ASCII 码表示的十六进制数的字符个数必须为偶数,除了是1 - 9 和 A(a) - F(f) 以外没有别的字符;
// 程序中不对 pAscii 和 pHex 的合法性进行检查;
// 也不对数组越界进行检查。

//长度不对,不是0-9 A-F a-f return false; else return true
//例 "11224455"->"\x11\x22\x44\x55" nlen=8
////////////////////////////////////////////////////////////////////////////////////////////
bool AC_decl AsciiToHex(unsigned char * pAscii, unsigned char * pHex, int nLen);
...全文
230 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixingzhong 2005-12-31
  • 打赏
  • 举报
回复
两个问题不就是一个问题么 ?

一个 逆过程 ...
qybao 2005-12-28
  • 打赏
  • 举报
回复
好玩,抽空做了下

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

void HexToAscii(unsigned char * pHex, unsigned char * pASSCHex, int nLen);
bool AsciiToHex(unsigned char * pAscii, unsigned char * pHex, int nLen);

int main(int argc, char** argv)
{
int nlen;
unsigned char val1[5];
unsigned char val2[9];

memset(val1, 0, sizeof(val1));
memset(val2, 0, sizeof(val2));

nlen = 4;
memcpy(val1, "\x11\x22\x44\x66", sizeof(unsigned char)*nlen);
printf("Call HexToAscii...\n");
printf("*pHex=\"\\x%x\\x%x\\x%x\\x%x\"\n", val1[0], val1[1], val1[2], val1[3]);
HexToAscii(val1, val2, nlen);
printf("*pASSCHex=\"%s\"\n", val2);

printf("\n");
nlen = 8;
memcpy(val2, "11224455", sizeof(unsigned char)*nlen);
printf("Call AsciiToHex...\n");
printf("*pAscii=\"%s\"\n", val2);
AsciiToHex(val2, val1, nlen);
printf("*pHex=\"\\x%x\\x%x\\x%x\\x%x\"\n", val1[0], val1[1], val1[2], val1[3]);

return 0;

}

void HexToAscii(unsigned char * pHex, unsigned char * pASSCHex, int nLen)
{
int idx;
for (idx=0; idx<nLen; idx++) {
sprintf((char *)pASSCHex, "%x", *(pHex+idx));
pASSCHex += 2;
}
}

bool AsciiToHex(unsigned char * pAscii, unsigned char * pHex, int nLen)
{
int idx;
char c;
for (idx=0; idx<nLen; idx++) {
c = *(pAscii+idx);
if (c>='0' && c<='9') {
*pHex <<= 4;
*pHex += (c-'0');
}
else if (c>='a' && c<='z') {
*pHex <<= 4;
*pHex += (c-'a') + 10;
}
else if (c>='A' && c<='Z') {
*pHex <<= 4;
*pHex += (c-'A') + 10;
}
else {
return false;
}
if (idx%2 == 1) {
pHex++;
}
}

return true;
}
waini12 2005-12-28
  • 打赏
  • 举报
回复
这么容易的
wzjall 2005-12-28
  • 打赏
  • 举报
回复
不会!顶一下!
很少看到星星提问的.
xiaocai0001 2005-12-26
  • 打赏
  • 举报
回复
论坛上应该有这样的代码, 搜搜看哪
llf_hust 2005-12-26
  • 打赏
  • 举报
回复
是一个朋友的要求
xiaocai0001 2005-12-26
  • 打赏
  • 举报
回复
llf_hust在搞什么啊? 怎么搞这两道题出来干什么啊?

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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