如何将unsigned char *字符串转成16进制并存入unsigned char *中

linuxlan 2009-04-24 10:11:45
最近在研究进制转换!但是一直没有思路怎么写字符串转16进制的程序!

unsigned char * 中的数据转成16进制数据并存入 unsigned char *中


...全文
1133 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangmanapple 2012-08-11
  • 打赏
  • 举报
回复
没有直接转化的函数吗
frtmpnn 2012-04-02
  • 打赏
  • 举报
回复
ding
studying
hongguang1978 2010-03-15
  • 打赏
  • 举报
回复
谢谢,学习一下!
jyh_baoding 2009-04-24
  • 打赏
  • 举报
回复
楼上实现的很好
Allen_zhang 2009-04-24
  • 打赏
  • 举报
回复
给你一个工具函数
byte和十六进制的互换,一个编码一个解码

bool DeCombinByte(const byte *byIn, const int iSrcLen, char *szOut)
{
char *szTmp = NULL;
try
{
szTmp = new char[iSrcLen*2];
int k = 0;
for (int j = 0; j < iSrcLen; j++)
{
szTmp[k] = byIn[j] >> 4;
szTmp[k+1] = byIn[j] & 0x0F;
k += 2;
}
for (int i = 0; i < iSrcLen*2; i++)
{
if(szTmp[i] > 9)
szOut[i] = szTmp[i] + 55;
else
szOut[i] = szTmp[i] + 48;
}
delete[] szTmp;
return true;
}
catch(...)
{
ERRORMSG("DeCombinByte Exception");
if(NULL !=szTmp)
delete szTmp;
return false;
}
}

bool CombinByte(const char *szIn, BYTE *byOut, const int iilen = -1)
{
char *szTmp = NULL;
try
{
int iSrcLen = iilen;
if(iilen < 0)
iSrcLen = strlen(szIn);
szTmp = new char[iSrcLen];
for (int i = 0; i < iSrcLen; i++)
{
if (szIn[i] >= 65)
szTmp[i] = szIn[i] - 55;
else
szTmp[i] = szIn[i] - 48;
}
int k = 0;
for (int j = 0; j < iSrcLen / 2; j++)
{
byOut[j] = (BYTE)((szTmp[k] << 4) | (szTmp[k+1]));
k += 2;
}
delete[] szTmp;
return true;
}
catch(...)
{
ERRORMSG("CombinByte Exception");
if(NULL !=szTmp)
delete szTmp;
return false;
}
}
linwendong1982 2009-04-24
  • 打赏
  • 举报
回复
55和48是什么含义

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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