2010-09-16 13 views
6

मैं एक wchar_tQChar wchar_t को

मैं कोशिश की है करने के लिए एक QChar बदलने की आवश्यकता है:

#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 * सरणी) फ़ंक्शन का उपयोग पता चलता है, मैं मैंने कोशिश की है और यह अनिवार्य रूप से उपरोक्त की तरह ही करता है और वर्णों को स्थानांतरित नहीं करता है जैसा कि इसे करना चाहिए। मैं दिनों के लिए इस साधारण सी समस्या पर किया गया है,

#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; 

} 

कृपया मदद:

नीचे अगर तुम मुझे विश्वास नहीं होता कि के लिए कोड है। मैं आदर्श रूप से wchar_t का उपयोग नहीं करना चाहूंगा लेकिन दुर्भाग्य से सीरियल आरएस 232 कमांड का उपयोग करके पंप को नियंत्रित करने के लिए किसी तीसरे पक्ष के फ़ंक्शन में इस प्रकार के पॉइंटर की आवश्यकता होती है।

धन्यवाद।

संपादित करें: इस कोड को चलाने के लिए आपको क्यूटी पुस्तकालयों की आवश्यकता होगी, आप इन्हें क्यूटी निर्माता डाउनलोड करके प्राप्त कर सकते हैं और कंसोल में आउटपुट प्राप्त करने के लिए आपको "CONFIG + = console" कमांड को जोड़ना होगा। नेटबीन्स प्रोजेक्ट का उपयोग करते हुए समर्थक फ़ाइल (क्यूटी निर्माता में) या गुणों के तहत कस्टम परिभाषाओं के लिए।

संपादित करें: अपने सही जवाब के लिए नीचे दिए गए Vlad को

धन्यवाद:

यहाँ एक ही बात करने के लिए अद्यतन कोड लेकिन चार विधि से एक हस्तांतरण चार का उपयोग कर और अशक्त समाप्ति जोड़ने के लिए याद है।

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

व्लाड की तरह नीचे बताया गया है, आपका कोड मूल रूप से wchar_t स्ट्रिंग आउटपुट के लिए cout का उपयोग करने के अलावा अन्य सही है। Wcout पर अंतिम cout बदलें आपको सही परिणाम देगा। –

उत्तर

7

यहाँ दोनों std::wstring और wchar_t सरणी में QString परिवर्तित करने का एक उदाहरण है:

#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 परिवर्तित अधिक त्रुटि प्रवण और कहा कि उत्पादन यूनिकोड स्ट्रिंग के लिए, आप के लिए है है std::cout के बजाय std::wcout का उपयोग करें, जो एक ही आउटपुट स्ट्रीम है लेकिन wchar_t के लिए।

+0

यह 'wchar_t सरणी [qstr.size() + 1]; 'सी नहीं है और यह सी ++ नहीं है। –

+0

@BenVoigt: निश्चित रूप से, यह वीएलए है। जल्द ही सी ++ में होना! –

+1

नहीं सी ++ में एक समान सुविधा होगी, लेकिन 'sizeof' (जो आपका उत्तर उपयोग करता है) C++ रनटाइम-आकार वाली स्वचालित सरणी पर काम नहीं करता है। बेशक, आकार का आपका उपयोग व्यर्थ है, जैसे कि उस स्थिति का उल्लंघन हो जाता है, आप पहले से ही बफर को ओवरराउन कर चुके हैं और आप ठीक करने के लिए बहुत कुछ नहीं कर सकते हैं। ओटीओएच ['toWCharArray' दस्तावेज़ीकरण] (http://qt-project.org/doc/qt-4.8/qstring.html#toWCharArray) अधिकतम लंबाई के बारे में वादे करता है, इसलिए स्थिति को हटाया जा सकता है। –

संबंधित मुद्दे