1、直接转成对应16进制字符串
如:
转换前:char src[]={0x12,0x34,0x56};
转换后:“123456”
以下两种方式同样效果
static std::string bytes2HexString(const unsigned char *data, int len)
{
std::stringstream ss;
char temp[3];
for (int i = 0; i < len; i++) {
sprintf(temp, "%02x", data[i]);
ss << temp;
}
return ss.str();
}
static std::string hexArrayToString(const uint8_t* hexArray, size_t arraySize)
{
std::stringstream ss;
for (size_t i = 0; i < arraySize; ++i) {
ss << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(hexArray[i]);
}
return ss.str();
}
2、转为字符串
转换前:char src[]="E69CAAE79FA5E8AEBEE5A487"; // 字符:未知设备
转换后:“未知设备”
//16进制字符串转为字符串,
static int hex_str_2_str(char *dest, char *src)
{
int len = strlen(src); // 获取接收数据长度
int i,j;
for (i = 0, j = 0; i < len; i+=2) { // 每次取两个字符
char tmp_buf[3]; // 每两个字符组成一个16进制字符串,同时结尾需要空字符来告诉编译器我们的是字符串
char *endptr; // 保存已转换数值后的下一个字符
// 以下为取待转换的16进制字符串
tmp_buf[0] = src[i];
tmp_buf[1] = src[i + 1];
tmp_buf[2] = '\0'; // 记得添加空字符
// 转换成16进制,base传16即可
dest[j++] = strtol(tmp_buf, &endptr, 16);
}
dest[j] = '\0'; // 添加字符串结束符
return j;
}