tôi cần phải chuyển đổi một QChar đến một wchar_tQChar để wchar_t
Tôi đã thử những điều sau đây:
#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;
}
Oh và trước khi ai đó gợi ý sử dụng chức năng .toWCharArray (* mảng wchar_t), tôi đã thử điều đó và về cơ bản nó cũng giống như trên và không chuyển các ký tự như nó cần.
Dưới đây là mã cho rằng nếu bạn không tin tôi:
#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;
}
Hãy giúp đỡ, tôi đã ở vấn đề đơn giản này trong nhiều ngày. Tôi lý tưởng là không sử dụng wchar_t's ở tất cả, nhưng tiếc là một con trỏ đến loại này là cần thiết trong một chức năng của bên thứ ba để kiểm soát một máy bơm sử dụng lệnh RS232 nối tiếp.
Cảm ơn.
EDIT: Để chạy mã này, bạn sẽ cần các thư viện QT, bạn có thể lấy chúng bằng cách tải xuống trình tạo QT và để có được đầu ra trong bàn điều khiển, bạn sẽ phải thêm lệnh "CONFIG + = console" vào. tập tin chuyên nghiệp (trong tác giả QT) hoặc các định nghĩa tùy chỉnh theo thuộc tính nếu sử dụng dự án netbeans.
EDIT:
Nhờ Vlad dưới đây để trả lời đúng của mình:
Đây là mã cập nhật để làm điều tương tự nhưng sử dụng một char chuyển bằng phương pháp char và ghi nhớ để thêm việc chấm dứt null.
#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;
}
Giống như Vlad chỉ ra dưới đây, mã của bạn về cơ bản là chính xác khác hơn là sử dụng cout cho đầu ra chuỗi wchar_t. Thay đổi cout cuối cùng để wcout sẽ cho bạn kết quả chính xác. –