您的位置:首页 > 编程语言 > C语言/C++

C语言实现字节流与十六进制字符串的相互转换

2016-03-29 22:55 162 查看
//字节流转换为十六进制字符串
void ByteToHexStr(const unsigned char* source, char* dest, int sourceLen)
{
short i;
unsigned char highByte, lowByte;

for (i = 0; i < sourceLen; i++)
{
highByte = source[i] >> 4;
lowByte = source[i] & 0x0f;

highByte += 0x30;

if (highByte > 0x39)
dest[i * 2] = highByte + 0x07;
else
dest[i * 2] = highByte;

lowByte += 0x30;
if (lowByte > 0x39)
dest[i * 2 + 1] = lowByte + 0x07;
else
dest[i * 2 + 1] = lowByte;
}
return;
}


//字节流转换为十六进制字符串的另一种实现方式
void Hex2Str(const char *sSrc, char *sDest, int nSrcLen)
{
int  i;
char szTmp[3];

for (i = 0; i < nSrcLen; i++)
{
sprintf(szTmp, "%02X", (unsigned char)sSrc[i]);
memcpy(&sDest[i * 2], szTmp, 2);
}
return;
}

//string实现方法字节流转十六进制字符串
std::string ToHexString(const UCHAR* buf, int len, std::string tok/* = " "*/)
{
std::string output;
char temp[8];
for (int i = 0; i < len; ++i)
{
sprintf(temp, "%.2x", (UCHAR)buf[i]);
output.append(temp);
if (i < len -1)
{
output.append(tok);
}
}

return output;
}


//十六进制字符串转换为字节流
void HexStrToByte(const char* source, unsigned char* dest, int sourceLen)
{
short i;
unsigned char highByte, lowByte;

for (i = 0; i < sourceLen; i += 2)
{
highByte = toupper(source[i]);
lowByte = toupper(source[i + 1]);

if (highByte > 0x39)
highByte -= 0x37;
else
highByte -= 0x30;

if (lowByte > 0x39)
lowByte -= 0x37;
else
lowByte -= 0x30;

dest[i / 2] = (highByte << 4) | lowByte;
}
return;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: