我需要一个QString(例如“ A”)并将此字符串转换为0x41。输入是QString,输出必须是“ WORD”(微软的东西)。
在我的情况下,WORD是一个无符号的short int。我试过了 :
Qstring str = "A"
qDebug() << str.toLatin1().toHex().prepend("0x");
结果是好的“ 0x41”,但是它不是一个无符号的短int :(我已经尝试过强制转换,但是它不起作用。
公用答案似乎使用“ toUShort”,但是我的代码不适用于此更改。我想用dll winuser(https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms646270%28v=vs.85%29.aspx)模拟键盘:
此代码的工作原理:
INPUT key;
key.type = INPUT_KEYBOARD;
key.ki.wScan = 0; // hardware scan code for key
key.ki.time = 0;
key.ki.dwExtraInfo = 0;
key.ki.wVk = 0x42; // virtual-key code for the "a" key
key.ki.dwFlags = 0; // 0 for key press
SendInput(1, &key, sizeof(INPUT));
key.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
SendInput(1, &key, sizeof(INPUT));
那没有:
QString str = "a";
bool ok;
INPUT key;
key.type = INPUT_KEYBOARD;
key.ki.wScan = 0; // hardware scan code for key
key.ki.time = 0;
key.ki.dwExtraInfo = 0;
key.ki.wVk = str.toUShort(&ok,16);
key.ki.dwFlags = 0; // 0 for key press
SendInput(1, &key, sizeof(INPUT));
key.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
SendInput(1, &key, sizeof(INPUT));
也许只是因为空头返回42而不是0x42。
- 解决方案 -
void SyncKeyboard::writeUID(QString uid)
{
qDebug() << uid;
for(int i = 0; i < uid.length(); i++)
pressKey(uid.at(i).unicode());
}
void SyncKeyboard::pressKey(ushort letter)
{
INPUT key;
key.type = INPUT_KEYBOARD;
key.ki.wScan = 0; // hardware scan code for key
key.ki.time = 0;
key.ki.dwExtraInfo = 0;
key.ki.wVk = letter;
key.ki.dwFlags = 0; // 0 for key press
SendInput(1, &key, sizeof(INPUT));
key.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
SendInput(1, &key, sizeof(INPUT));
}
如果您只需要获取一个无符号的短整数,即来自的十六进制ASCII码A
,则可以尝试使用QByteArray :: toUShort。
ushort QByteArray::toUShort ( bool * ok = 0, int base = 16 ) const
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句