十六进制与字符串之间互转


下面是函数:
// 字节数据转换为可打印字符串
// 如:{0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01} --> "C8329BFD0E01"
// 输入: pSrc - 源数据指针
//          nSrcLength - 源数据长度
// 输出: pDst - 目标字符串指针
// 返回: 目标字符串长度
int bytes2HexStr(unsigned char* pSrc, unsigned char* pDst, int nSrcLength)
{
const char tab[]="0123456789ABCDEF"; // 0x0-0xf的字符查找表

for (int i = 0; i < nSrcLength; i++){

*pDst++ = tab[*pSrc >> 4]; // 输出高4位
*pDst++ = tab[*pSrc & 0x0f]; // 输出低4位
pSrc++;
}

// 输出字符串加个结束符
*pDst = '\0';

// 返回目标字符串长度
return (nSrcLength * 2);
}

// 可打印字符串转换为字节数据
// 如:"C8329BFD0E01" --> {0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01}
// 输入: pSrc - 源字符串指针
//          nSrcLength - 源字符串长度
// 输出: pDst - 目标数据指针
// 返回: 目标数据长度
int hexStr2Bytes(unsigned char* pSrc,unsigned   char* pDst, int nSrcLength)
{
for (int i = 0; i < nSrcLength; i += 2)
{
// 输出高4位
if ((*pSrc >= '0') && (*pSrc <= '9')){
*pDst = (*pSrc - '0') << 4;
}
else{
*pDst = (*pSrc - 'A' + 10) << 4;
}

pSrc++;

// 输出低4位
if ((*pSrc>='0') && (*pSrc<='9')){
*pDst |= *pSrc - '0';
}
else{
*pDst |= *pSrc - 'A' + 10;
}
pSrc++;
pDst++;
}

// 返回目标数据长度
return (nSrcLength / 2);
}


使用:
unsigned char src[255] = {0x1A,0x0,0x22,0x89,0xff,0xee,0xbc};

unsigned char dst[255] = {0};
int szLength = 0;
int byLength = 0;

//to hexstr
byLength = bytes2HexStr(src,dst,7);
printf("dst: %s\n", dst);

//hexstr 2 str
szLength = hexStr2Bytes(dst,src,strlen((const char *)dst));
for(int i=0; i<szLength; i++){
printf("x, ",src[i]);
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值