Şu anda varolan bir kitaplığın etrafındaki sarıcı olan bir eklenti yazıyorum. Eklentinin ana bilgisayarı, aşağıdaki gibi tanımlanmış bir utf-16 biçimlendirilmiş dizgeyi izler:Nasıl utf16 ushort dizisini utf8 std :: string dosyasına dönüştürebilirim?
typedef unsigned short PA_Unichar;
Ve sarılmış kütüphane beni atma, ben bu işe yaramazsa açıkçası
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));
}
Fakat böyle bir dönüşüm fonksiyonu yazma çalıştı ancak const char * veya bir std :: string utf-8 biçimlendirilmiş dize kabul "const işaretçisinden" (aka 'const unsigned short *') 'const char16_t *' öğesine bir derleme hatası "derlenmiyor"
Bunu yapmanın en zarif/doğru yolu nedir?
Önceden teşekkür ederiz. Eğer teşebbüs olarak
Platformunuzda std :: is_same :: value 'değeri nedir? Ayrıca hangi derleyici? –
moshbear
'std :: is_same :: value' 0 (false) değerine sahip ve Apple LLVM derleyicisi 4.1 ile Mac'te derledim, ancak Visual Studio 2012 ile derlemeyi de yaptım –
Robotex
: //www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2018.html, 'char16_t' uint16_least_t' değil, uint16_t' değil. Platformunuzda, 'uint16_least_t' * imzasız kısalara takma * gibi görünüyor, dolayısıyla sizeof (char16_t)! = Sizeof (imzasız kısa). 'dipnot's eşleşmediğinde 'static_cast' işaretçi türlerinde başarısız olur. – moshbear