2015-03-09 3 views
0

Мне нужно взять QString (например, «A») и преобразовать эту строку в 0x41. Вход представляет собой QString, а выход должен быть «WORD» (материал Microsoft).Преобразование QString в unsigned short int

СЛОВО - это неподписанный короткий int в моем случае. Я пробовал:.

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

результат хороший «0x41», но это не беззнаковое короткое ИНТ :(Я попытался литая, но он не работает

коммун ответ, кажется, использование " toUShort», но мой код не работает с этим изменением я хочу эмулировать клавиатуру с дллами 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.

- SOLUTION -

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)); 
} 
+0

Показать свой состав, пожалуйста. – LogicStuff

ответ

0

Если вам просто нужно, чтобы получить неподписанные короткий INT, а именно шестнадцатеричный ASCII код из A, вы можете попробовать использовать вместо QByteArray::toUShort.

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

Я пробовал, но, к сожалению, он не работает, возможно, я не правильно использую метод ... (я отредактировал мой вопрос) –

+0

Вы не можете вызвать 'toUShort()' из 'str', потому что' str' является 'QString', а' toUShort() '-' QByteArray'. Итак, попробуйте 'str.toLatin1(). ToHex(). Prepend (« 0x »). ToUShort (& ok, 16)' – Han

+0

Извините, в 'QString' есть функция с именем' toUShort() ', но с разным значением. В вашем случае он преобразует 'A' в шестнадцатеричное число, поэтому результат будет равен 10 десятичным. Подробнее см. [Пример] (http://qt-project.org/doc/qt-4.8/qstring.html#toUShort) здесь – Han

Смежные вопросы