簡體   English   中英

將QString轉換為unsigned short int

[英]Convert QString to unsigned short int

我需要一個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));
}

如果只需要獲取一個無符號的短整數,即A的十六進制ASCII碼,則可以嘗試使用QByteArray :: toUShort

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM