वर्तमान में मैं एक प्लगइन लिख रहा हूं जो कि मौजूदा पुस्तकालय के आसपास सिर्फ एक रैपर है। प्लगइन का होस्ट मुझे एक यूटीएफ -16 स्वरूपित स्ट्रिंग पास करता है जो निम्नलिखितutf16 ushort सरणी को utf8 std :: स्ट्रिंग में कैसे परिवर्तित करें?
टाइपपीफ हस्ताक्षरित छोटा PA_Unichar;
और लिपटे पुस्तकालय मुझे फेंक, केवल एक स्थिरांक चार * या एक std :: स्ट्रिंग utf-8 स्वरूपित स्ट्रिंग मैं की तरह
std::string toUtf8(const PA_Unichar* data)
{
std::wstring_convert<std::codecvt_utf8_utf16<char16_t>,char16_t> convert;
return std::string(convert.to_bytes(static_cast<const char16_t*>(data));
}
लेकिन स्पष्ट रूप से एक रूपांतरण समारोह यह काम नहीं करता लेखन की कोशिश की स्वीकार करता है एक संकलन त्रुटि "static_cast 'कॉन्स्ट पॉइंटर' (उर्फ 'कॉन्स अनगिनत शॉर्ट *') से 'const char16_t *' को अनुमति नहीं है"
तो ऐसा करने का सबसे सुरुचिपूर्ण/सही तरीका क्या है?
अग्रिम धन्यवाद।
आपके मंच पर 'std :: is_same :: value' का मूल्य क्या है? इसके अलावा, कौन सा कंपाइलर? –
moshbear
'std :: is_same :: value' का मान 0 (झूठा) है और मैं ऐप्पल एलएलवीएम कंपाइलर 4.1 के साथ मैक पर संकलन कर रहा हूं, हालांकि मैं इसे विजुअल स्टूडियो 2012 –
Robotex
के साथ संकलित करता हूं http के अनुसार : //www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2018.html, 'char16_t'' uint16_least_t' है, 'uint16_t' नहीं। आपके प्लेटफॉर्म पर, ऐसा लगता है कि 'uint16_least_t' * नहीं * * हस्ताक्षरित शॉर्ट 'के लिए उपनाम है, इस प्रकार' sizeof (char16_t)! = Sizeof (unsigned short)'। 'static_cast' पॉइंटर प्रकारों पर असफल हो जाएगा जब अंतर्निहित 'आकार का मिलान नहीं होता है। – moshbear