Hex To Ascii

//以下是关于 hex 转换为 ascii的代码,一开始还觉得不以为然,但真正动手,还是发现一些急需完善的东东,
//比如考虑输入的问题,还有大小写的问题
//很多情况下,是无法预测用户的输入的,唯一能做的是,把程序完善得非常perfection


#include <iostream>

using namespace std;


int binarySearch(int *a, int len, int val)
{
int beg, mid, end;
beg = 0;
end = len - 1;
while (beg < end - 1)
{
mid = beg + (end - beg) / 2;
if(a[mid] <= val) beg = mid;
else end = mid;
}
if(a[end] == val) return end;
else if(a[beg] == val) return beg;
return -1;
}

#define ISDIGIT(a) ('0' <= (a) && '9' >= (a))
#define ISUP(a) ('A' <= (a) && 'F' >= (a))
#define ISLO(a) ('a' <= (a) && 'f' >= (a))


bool ToUp(char * s)
{
char *p = s;
while('0' == *p) ++p;
if('x' == *p || 'X' == *p) ++p;
while (*p)
{
if(ISDIGIT(*p) || ISUP(*p)) ++p;
else if(ISLO(*p))
{
*p -= 32;
++p;
}
else return false;
}
return true;
}

char ExHexToAscii(const char a, const char b)
{
char c;
if(ISDIGIT(a) && ISDIGIT(b)) c = (a << 4) | (b & 0x0F);
else if(ISDIGIT(a) && ISUP(b)) c = (a << 4) | (b - 0x37);
else if(ISUP(a) && ISDIGIT(b)) c = ((a - 0x37) << 4) | (b & 0x0F);
else if(ISUP(a) && ISUP(b)) c = ((a - 0x37) << 4) | (b - 0x37);
return c;
}

char *HexToAscii(const char *sHex, char *sasc, int len)
{
const char *p = sHex;
char *q = sasc;

while('0' == *p) ++p;
if('x' == *p || 'X' == *p) ++p;

if(len % 2)
{
*q = ExHexToAscii('0', *p);
++q;
++p;
}
for (; *p; )
{
*q = ExHexToAscii(*p, *(p + 1));
p += 2;
++q;
}
return sasc;
}


int main()
{
char str[1024] = {0};
char hex[] = "0x313233343536373839d6D0";

if(ToUp(hex))
{
cout << HexToAscii(hex, str, strlen(hex)) << endl;
}
else
{
cout << "Error" << endl;
}


return 0;
}

转载于:https://www.cnblogs.com/to-be-st/archive/2011/12/13/2286346.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值