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

客官°小女子只卖身不卖艺 2022-03-17 05:30 691阅读 0赞

//字节流转换为十六进制字符串

//(例如:char数组中原先存储的{0x2e},转换之后变成了char数组中存储的{0x32,0x65})
void ByteToHexStr(const unsigned char* source, char* dest, int sourceLen)
{
short i;
unsigned char highByte, lowByte;

  1. for (i = 0; i < sourceLen; i++)
  2. \{
  3. highByte = source\[i\] >> 4;
  4. lowByte = source\[i\] & 0x0f;
  5. highByte += 0x30;
  6. if (highByte > 0x39)
  7. dest\[i \* 2\] = highByte + 0x07;
  8. else
  9. dest\[i \* 2\] = highByte;
  10. lowByte += 0x30;
  11. if (lowByte > 0x39)
  12. dest\[i \* 2 + 1\] = lowByte + 0x07;
  13. else
  14. dest\[i \* 2 + 1\] = lowByte;
  15. \}
  16. return;

}
//十六进制字符串转换为字节流

//(例如:char数组中原先存储的{0x32,0x65},转换之后变成了char数组中存储的{0x2e})
void HexStrToByte(const char* source, unsigned char* dest, int sourceLen)
{
short i;
unsigned char highByte, lowByte;

  1. for (i = 0; i < sourceLen; i += 2)
  2. \{
  3. highByte = toupper(source\[i\]);
  4. lowByte = toupper(source\[i + 1\]);
  5. if (highByte > 0x39)
  6. highByte -= 0x37;
  7. else
  8. highByte -= 0x30;
  9. if (lowByte > 0x39)
  10. lowByte -= 0x37;
  11. else
  12. lowByte -= 0x30;
  13. dest\[i / 2\] = (highByte << 4) | lowByte;
  14. \}
  15. return;

}

发表评论

表情:
评论列表 (有 0 条评论,691人围观)

还没有评论,来说两句吧...

相关阅读