我有一个来自源的二进制文件,我必须从中检索数据,以便以人类可读的形式读取。我已经检索了数据,并将其保存在4位六进制中。例如,文件大小是256字节,我在hexa中检索它,得到512个4位的hexa值。现在,为了使它成为人类可读的ASCII字符,我必须添加两个4位的hexa来生成一个字节。我检索十六进制格式数据的方式是
byte = read_buffer[i];
// Convert the Most Significant nibble for first byte
write_buffer_hex[(i + 1) * 2 + 0] = hex_chars[(byte >> 4)];
// Convert the Least Significant nibble for the first byte
write_buffer_hex[(i + 1) * 2 + 1] = hex_chars[byte & 0x0f];
现在,我的问题是,我应该如何将这两个十六进制值相加,以获得ASCII值。我现在的做法是把这两个加起来,但这是正确的方法吗??。感谢
我同意John的观点,直接以十六进制输出可能更容易,比如:
printf("%x", byte);
或者使用C++的IOstream库:
cout << hex << byte;
使用查找表:
static char const alphabet[] = "0123456789ABCDEF";
// Loop:
output[cursor++] = alphabet[byte % 16];
output[cursor++] = alphabet[byte / 16];
您也可以直接索引到字符串中:
output[cursor++] = "0123456789ABCDEF"[byte % 16];