16进制转ascii
#define DRM_BUFFER_CONVERT_OFFSET 2
#define ASCII_CODE_NUM_0 (48)
#define ASCII_CODE_LETTER_LOWER_A (97)
static guint8
gst_m3u8_parse_hex_num_2_ascii (guint8 src)
{
if (src < 0xa) {
return src + ASCII_CODE_NUM_0;
} else {
return src + ASCII_CODE_LETTER_LOWER_A - 0xa;
}
}
字节数组转字符串
static gint
gst_m3u8_parse_bytes_2_hex_char (guint8 *src, guint src_size)
{
guint8 dest[DRM_MAX_DRM_INFO_SIZE * DRM_BUFFER_CONVERT_OFFSET];
if (src == NULL) {
GST_ERROR ("The Given src NULL or dest NULL.\n");
return -1;
}
if (src_size >= DRM_MAX_DRM_INFO_SIZE) {
GST_ERROR ("The Given Src Len: %d, Buffer Size: %d Not Match.\n", src_size, DRM_MAX_DRM_INFO_SIZE);
return -1;
}
for (guint idx = 0; idx < src_size; idx++) { // 1 Static Hex Char should be parsed to 2 Hex Char
dest[idx * DRM_BUFFER_CONVERT_OFFSET] =
gst_m3u8_parse_hex_num_2_ascii ((src[idx] >> 4) & 0x0f); // Each Hex char uses 4 bits
dest[idx * DRM_BUFFER_CONVERT_OFFSET + 1] = gst_m3u8_parse_hex_num_2_ascii (src[idx] & 0x0f);
}
dest[src_size * DRM_BUFFER_CONVERT_OFFSET] = '\0';
GST_ERROR ("gst_m3u8_parse_bytes_2_hex_char dest:%s\n", dest);
return 0;
}