C ++以十六进制显示字节数组

时间:2012-08-08 11:07:34

标签: c++ string dll hex hook

我已经制作了一个dll钩子,它会在每次主应用程序发生事件时发送Byte数组的地址。

显示代码:

void receivedPacket(char *packet){
    short header = packet[2];

    TCHAR str[255];

    _stprintf(str, _T("Header : %lX\n"), header);  // This works fine. It return 0x38 as it should.

    WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), str, strlen(str), 0, 0);
    WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), packet, 34, 0, 0);

}

这是来自该地址的字节数组的示例,这就是我希望它显示的方式: 05 01 38 00 60 00 9D 01 00 00 00 00 00 70 C9 7D 0E 00 00 00 00 00 00 00 FF 20 79 40 00 00 00 00

但是,使用我当前的代码,它只会显示奇怪的符号。那么我们如何将所有这些奇怪的符号转换为十六进制呢?

我实际上是C ++的新手。

1 个答案:

答案 0 :(得分:2)

格式化字符串中的每个字节:

static TCHAR const alphabet[] = _T("0123456789ABCDEF");

for (TCHAR * p = str; *p; ++p)
{
    TCHAR const s[2] = { alphabet[p / 16], alphabet[p % 16] };
    WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), s, 2, 0, 0);
}