2015-05-23 6 views
5

मैं इरलिच के साथ एक प्रोग्राम बनाने की कोशिश कर रहा हूं जो लुआ में लिखी गई कॉन्फ़िगरेशन फ़ाइल से कुछ चीजें लोड करता है, जिसमें से एक विंडो शीर्षक है। हालांकि, lua_tostring फ़ंक्शन const char* देता है जबकि इरलिच डिवाइस की विधि setWindowCaptionconst wchar_t* की अपेक्षा करता है। मैं lua_tostring द्वारा लौटाई गई स्ट्रिंग को कैसे परिवर्तित कर सकता हूं?कन्वर्ट चार * को कॉन्स्टर्ट करने के लिए wchar_t *

उत्तर

3

एसओ पर कई प्रश्न हैं जो विंडोज़ पर समस्या का समाधान करते हैं। नमूना पोस्ट:

  1. char* to const wchar_t * conversion
  2. conversion from unsigned char* to const wchar_t*

एक मंच नास्तिक विधि http://ubuntuforums.org/showthread.php?t=1579640 पर तैनात नहीं है। इस साइट से स्रोत है (मुझे आशा है कि मैं किसी भी कॉपीराइट का उल्लंघन नहीं कर रहा हूँ):

#include <locale> 
#include <iostream> 
#include <string> 
#include <sstream> 
using namespace std ; 

wstring widen(const string& str) 
{ 
    wostringstream wstm ; 
    const ctype<wchar_t>& ctfacet = 
         use_facet< ctype<wchar_t> >(wstm.getloc()) ; 
    for(size_t i=0 ; i<str.size() ; ++i) 
       wstm << ctfacet.widen(str[i]) ; 
    return wstm.str() ; 
} 

string narrow(const wstring& str) 
{ 
    ostringstream stm ; 
    const ctype<char>& ctfacet = 
         use_facet< ctype<char> >(stm.getloc()) ; 
    for(size_t i=0 ; i<str.size() ; ++i) 
        stm << ctfacet.narrow(str[i], 0) ; 
    return stm.str() ; 
} 

int main() 
{ 
    { 
    const char* cstr = "abcdefghijkl" ; 
    const wchar_t* wcstr = widen(cstr).c_str() ; 
    wcout << wcstr << L'\n' ; 
    } 
    { 
    const wchar_t* wcstr = L"mnopqrstuvwx" ; 
    const char* cstr = narrow(wcstr).c_str() ; 
    cout << cstr << '\n' ; 
    } 
} 
+0

स्पष्ट करने के लिए है कि भूल मैं उबंटू पर हूँ। अब आपके उत्तर का परीक्षण कर रहे हैं ... – Giaphage47

+0

आम तौर पर, मैंने पाया है कि उबंटू में सी ++ में विस्तृत पाठ से निपटने के लिए डिफ़ॉल्ट लोकेल सेट करना आवश्यक है। यह बहुत विडंबनापूर्ण है कि कार्यान्वयन कैसे व्यवहार करते हैं। यूनिक्स-भूमि के रूप में यूटीएफ -8 के साथ लोकेल संकीर्ण-व्यापक रूपांतरण के लिए शायद ही महत्वपूर्ण है, लेकिन सेट किया जाना चाहिए, जबकि विंडोज़ में विभिन्न एकल-बाइट एन्कोडिंग के साथ लोकेल बहुत महत्वपूर्ण है, लेकिन पहले से ही डिफ़ॉल्ट रूप से सेट है। –

2

आप उपयोग कर सकते हैं mbstowcs:

wchar_t WBuf[100]; 
    mbstowcs(WBuf,lua_tostring(/*...*/),99); 

या अधिक सुरक्षित:

const char* sz = lua_tostring(/*...*/); 
    std::vector<wchar_t> vec; 
    size_t len = strlen(sz); 
    vec.resize(len+1); 
    mbstowcs(&vec[0],sz,len); 
    const wchar_t* wsz = &vec[0]; 
संबंधित मुद्दे