我已经制作了一个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 ++的新手。
答案 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);
}