目前我正在寫一個插件,它只是一個現有庫的包裝。 插件的主機傳給我一個utf-16格式化的字符串,定義如下如何將utf16 ushort數組轉換爲utf8 std :: string?
typedef unsigned short PA_Unichar;
而且包裹庫只接受一個const char *或爲std :: string 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指針'(aka'const unsigned short *')到'const char16_t *'是不允許的」
那麼最優雅/正確的方法是什麼?
預先感謝您。
在你的平臺上'std :: is_same :: value'的值是多少?另外,哪個編譯器? –
moshbear
'std :: is_same :: value'的值爲0(false),我正在使用Apple LLVM編譯器4.1在Mac上進行編譯,儘管我也使用Visual Studio 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'看起來像* unsigned short,因此'sizeof(char16_t)!= sizeof(unsigned short)'。當底層的'sizeof's不匹配時'static_cast'將會在指針類型上失敗。 – moshbear