将QString转换为unsigned short int

时间:2015-03-09 18:24:33

标签: c++ qt

我需要使用QString(例如“A”)并将此字符串转换为0x41。 输入是一个QString,输出必须是“WORD”(微软的东西)。

在我的情况下,WORD是一个unsigned short int。 我试过了:

Qstring str = "A"
qDebug() << str.toLatin1().toHex().prepend("0x");

结果很好“0x41”,但它不是一个无符号的短int :(我试过演员,但它不起作用。

共同答案似乎使用“toUShort”但我的代码不适用于此更改。 我想用dll winuser(https://msdn.microsoft.com/en-us/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));
}

1 个答案:

答案 0 :(得分:0)

如果您只需要获得一个无符号短整数,即来自A的十六进制ASCII代码,您可以尝试使用QByteArray::toUShort代替。

ushort QByteArray::toUShort ( bool * ok = 0, int base = 16 ) const