QCHAR в WHAR_T.
Вопрос
Мне нужно преобразовать QCHAR в WHAR_T
Я пробовал следующее:
#include <cstdlib>
#include <QtGui/QApplication>
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
QString mystring = "Hello World\n";
wchar_t myArray[mystring.size()];
for (int x=0; x<mystring.size(); x++)
{
myArray[x] = mystring.at(x).toLatin1();
cout << mystring.at(x).toLatin1(); // checks the char at index x (fine)
}
cout << "myArray : " << myArray << "\n"; // doesn't give me correct value
return 0;
}
О, и до того, как кто-то предлагает использовать функцию .towchararray (wchar_t * Array), я пробовал это, и это, по сути, делает то же самое, что и выше, и не передает символы, как следует.
Ниже приведен код для этого, если вы не верите мне:
#include <cstdlib>
#include <QtGui/QApplication>
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
QString mystring = "Hello World\n";
cout << mystring.toLatin1().data();
wchar_t mywcharArray[mystring.size()];
cout << "Mystring size : " << mystring.size() << "\n";
int length = -1;
length = mystring.toWCharArray(mywcharArray);
cout << "length : " << length;
cout << mywcharArray;
return 0;
}
Пожалуйста, помогите, я был в этой простой проблеме в течение нескольких дней. Я в идеале хотел бы не использовать whar_t вообще, но, к сожалению, указатель на этот тип требуется в третьей стороне функции для управления насосом с использованием команд Serial RS232.
Спасибо.
Редактировать: Чтобы запустить этот код, вам понадобится библиотеки Qt, вы можете получить их, загрузив CT Creator и получить выходные данные в консоли, вам придется добавить команду «config + = console» в файл .pro (в файле .pro QT Creator) или к пользовательским определениям в рамках свойств при использовании проекта NetBeans.
РЕДАКТИРОВАТЬ:
Благодаря Владу ниже для его правильного ответа:
Вот обновленный код, который нужно сделать то же самое, но использование переноса CHAR по методу CHAR и запоминанию, чтобы добавить нулевое завершение.
#include <cstdlib>
#include <QtGui/QApplication>
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
QString mystring = "Hello World\n";
wchar_t myArray[mystring.size()];
for (int x=0; x<mystring.size(); x++)
{
myArray[x] = (wchar_t)mystring.at(x).toLatin1();
cout << mystring.at(x).toLatin1();
}
myArray[mystring.size()-1] = '\0'; // Add null character to end of wchar array
wcout << "myArray : " << myArray << "\n"; // use wcout to output wchar_t's
return 0;
}
Решение
Вот пример преобразования Qstring. в обоих std :: wstring. а также whar_t. множество:
#include <iostream>
#include <QtCore/QString>
using namespace std;
int main ()
{
// Create QT string.
QString qstr = "Hello World";
// Convert it into standard wstring.
std::wstring str = qstr.toStdWString ();
// Get the wchar_t pointer to the standard string.
const wchar_t *p = str.c_str ();
// Output results...
wcout << str << endl;
wcout << p << endl;
// Example of converting to C array of wchar_t.
wchar_t array[qstr.size () + 1];
int length = qstr.toWCharArray (array);
if (length < 0 || length >= sizeof(array) / sizeof (array[0]))
{
cerr << "Conversion failed..." << endl;
return 1;
}
array[length] = '\0'; // Manually put terminating character.
wcout << array << endl; // Output...
}
Обратите внимание, что преобразование Qstring. в массив более подвержен ошибкам и что для вывода строки Unicode, вы должны использовать STD :: WCOUT. вместо STD :: Cout., который такой же выходной поток, но для whar_t..