C++ printf WORD* (ToAscii)
C++ printf WORD* (ToAscii)
我使用钩子,我有一个vkCode和一个scanCode,所以我使用命令ToAscii()如下:
...
LPWORD wCharacter;
ToAscii(kbdStruct.vkCode, kbdStruct.scanCode, keyboard_state, wCharacter, 0);
所以现在wCharacter应该保持Ascii字符对吗?
我该怎么打印出来?
我试过:printf(wCharacter);
,但上面写着:";无法将"WORD*"转换为"const char*">
我做错了什么?如何打印单词*?还是我的ToAscii命令做错了?
- printf()第一个参数应该是一个格式字符串。你没有提供任何
- 字符串是以零字节结尾的一系列字符。如果您想打印出作为参数传递的单个字符,假设WORD是整型的,您可以使用"%c"格式的字符串
您不会对此做太多,您将向ToAscii()传递一个未初始化的指针。正确的代码应该是这样的:
WORD wCharacter[2];
int len = ToAscii(kbdStruct.vkCode, kbdStruct.scanCode, keyboard_state, wCharacter, 0);
if (len == 1) printf("%c", wCharacter[0]);
if (len == 2) printf("%c", wCharacter[1]);
这应该在一定程度上编译并运行。在实践中,你无法获得这种可靠性。您传递的*keyboard_state*变量应该是拥有前台窗口的进程的键盘状态。您应该注意该进程中活动的键盘布局(请参阅ToAsciiEx)。这不能与低级键盘挂钩一起使用。键盘记录器必须使用WH_CALLWNDPROC挂钩来拦截WM_CHAR消息(我认为从未编写过)很难做到这一点,需要一个可以注入其他进程的DLL。你当然是在发明轮子,购买而不是建造是最好的建议。也会让你的用户对你的意图更加放心。
LPWORD wCharacter
是指向单词的长指针。这里的字是两个字节的整数,而不是"0";单词";在一句话中。基本上是int16。printf会将其处理为.
printf("%hd", *wCharacter );
- 其中h表示16位值
- d指定一个整数
- *wCharacter是取消引用的指针或int的值
如果您希望打印值反映为未签名
printf("%hu", *wCharacter );
无符号十六进制
printf("%hx", *wCharacter );
带大写字母的无符号十六进制
printf("%hX", *wCharacter );
既然已经说了这么多,你的WORD int可能是一个Unicode字符或两字节字符,相当于一个正常的8位标准字符。
在unicode中,如果您仍将标准ascii字符表示为与某些阿拉伯语或中文字符并列,则可以将unicode字符转换为标准字符通过忽略第一个字节。
LPWORD wCharacter;
char *pChar = (char*)wCharacter;
printf("%c", pChar[1]);
- 声明pChar为指向8位值(char)的指针
- 将pChar地址设置为WORD指针
- 将pChar指针用作数组,并将其递增到秒字节[1]
如果您不使用国际字符集,这会起作用。
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 内联程序集printf将整数解释为地址
- 为什么mpfr_printf与十六进制浮点(%a转换说明符)的printf不同
- C++ Setter/Getter,cout 工作,printf 失败
- Printf 命令不打印时添加了查找常见除数的新代码
- SIGSEGV, 分段错误. 而 printf() 数组索引的值
- 为什么在包含iostream时可以使用printf()?
- 创建具有验证和语法突出显示的自定义 printf
- 0x%08lx 格式说明符在 printf 语句到 cout
- C printf 无法从终端按预期工作
- Printf 和 Echo 提供不同的输出
- C++ - scanf() 和 printf() 执行顺序不对
- cout 打印不准确的结果,printf 打印准确的结果
- 了解 printf 格式规范中的 %03.3u
- redefine printf(), sprintf(), etc. arm-none-eabi toolchain
- 为什么 printf 在 C++ 中的执行速度比 cout 快?另外scanf比cin慢,为什么?
- C++, printf vs cout performance
- printf 数据类型说明符复杂问题
- 在"printf"中使用标签"h"或"hh"是否涉及未定义的
- C++ printf WORD* (ToAscii)