0

我有一个来自源的二进制文件,我必须从中检索数据,以便以人类可读的形式读取它。我已经检索了数据并将其保存在 4 位十六进制中。例如,文件大小为 256 字节,我以六进制检索它并获得 512 个 4 位六进制值。现在,为了使其成为人类可读的 ASCII 字符,我必须添加两个 4 位十六进制来生成一个字节。我以十六进制格式检索数据的方式是

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 值。我现在正在做的就是添加这两个,但它是正确的方法吗??。谢谢

4

2 回答 2

2

我同意约翰的观点,直接以十六进制输出可能更容易,如下所示:

printf("%x", byte);

或使用 C++ 的 IOstream 库:

cout << hex << byte;
于 2012-08-23T16:03:47.237 回答
1

使用查找表:

static char const alphabet[] = "0123456789ABCDEF";

// Loop:

output[cursor++] = alphabet[byte % 16];
output[cursor++] = alphabet[byte / 16];

您也可以直接索引到字符串中:

output[cursor++] = "0123456789ABCDEF"[byte % 16];
于 2012-08-23T16:03:16.213 回答