直接上代码片段
/** * 字节数组转字符串 * @param source * 字符数组 * @param length * 字符数组长度 * @param target * 字符串 */ void uint8_2_hex(unsigned char *source, unsigned int length, unsigned char *target) { unsigned char ddl, ddh; for (int i = 0; i < length; i++) { ddh = static_cast<unsigned char>(48 + source[i] / 16); ddl = static_cast<unsigned char>(48 + source[i] % 16); if (ddh > 57) ddh = static_cast<unsigned char>(ddh + (97 - 58)); if (ddl > 57) ddl = static_cast<unsigned char>(ddl + (97 - 58)); target[i * 2] = ddh; target[i * 2 + 1] = ddl; } } /** * 字符串转字节数组 * @param source * 字符串 * @param length * 字符串长度 * @param target * 字节数组 * @param n * 转换后长度 */ void hex_2_uint8(const unsigned char *source, size_t length, unsigned char *target, size_t &n) { n = 0; for (int i = 0; i < length; i += 2) { if (source[i] >= 'a' && source[i] <= 'f') { target[n] = static_cast<unsigned char>(source[i] - 'a' + 10); } else if (source[i] >= 'A' && source[i] <= 'F') { target[n] = static_cast<unsigned char>(source[i] - 'A' + 10); } else { target[n] = static_cast<unsigned char>(source[i] - '0'); } if (source[i + 1] >= 'a' && source[i + 1] <= 'f') { target[n] = static_cast<unsigned char>((target[n] << 4) | (source[i + 1] - 'a' + 10)); } else if (source[i + 1] >= 'A' && source[i + 1] <= 'F') { target[n] = static_cast<unsigned char>((target[n] << 4) | (source[i + 1] - 'A' + 10)); } else { target[n] = (target[n] << 4) | (source[i + 1] - '0'); } ++n; } }
C语言十六进制字符串与字节数组相互转换