我正在嘗試使用Irrlicht創建一個程序,該程序從用Lua編寫的配置文件加載某些內容,其中一個是窗口標題。但是,lua_tostring
函數返回const char*
而Irrlicht設備的方法setWindowCaption
預計const wchar_t*
。我如何轉換lua_tostring
返回的字符串?將const char *轉換爲常量wchar_t *
5
A
回答
3
在SO上有多個問題可以解決Windows上的問題。樣品的帖子:
有張貼在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' ;
}
}
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];
相關問題
- 1. 轉const const wchar_t *爲const char *
- 2. 如何將'wchar_t *'轉換爲'const char *'
- 3. 如何爲wchar_t *轉換爲const char *
- 4. 無法將'LPCWSTR {aka const wchar_t *}'轉換爲'LPCSTR {aka const char *}
- 5. 無法將'const char *'轉換爲'LPCWSTR {aka const wchar_t *}'
- 6. 無法將參數1從'const char *'轉換爲'const wchar_t *'
- 7. 將wchar_t轉換爲char C++
- 8. 「默認參數」:無法從「爲const char [1]」轉換爲「常量爲wchar_t *」
- 9. 不能將'const char *'轉換爲'char * const *'
- 10. 轉換爲wchar_t爲CHAR
- 11. 將NSString轉換爲const char
- 12. 將NSString轉換爲const char *
- 13. 將const char *轉換爲int
- 14. 將UIImage轉換爲const char *?
- 15. 將int轉換爲常量wchar_t *
- 16. 將常量wchar_t *轉換爲WCHAR *
- 17. Const char * vs const wchar_t *(concatenation)
- 18. 將const const wchar_t *轉換爲python字符串在boost python
- 19. 如何將wchar_t **轉換爲char **?
- 20. 如何將PCWSTR轉換爲char []或wchar_t []
- 21. 不能將Const Char [21]轉換爲Char?
- 22. 在C++中將char *轉換爲const char *
- 23. C++將char轉換爲const char *
- 24. 將const char *轉換爲char *的問題
- 25. 如何將const char * const轉換爲const char *
- 26. 無法將參數1從'ATL :: CStringT <wchar_t,ATL :: StrTraitATL <wchar_t,ATL :: ChTraitsCRT <wchar_t> >>'轉換爲'const char *'
- 27. 如何爲const WCHAR *轉換爲const char *
- 28. 如何爲const char *轉換爲const WCHAR *
- 29. 從簽名爲const char *類型轉換爲字符常量*
- 30. C++加載錯誤:無法將const值類型*(又名常量wchar_t *)轉換爲常量字符*初始化
忘了澄清我在Ubuntu上。現在測試您的答案... – Giaphage47
通常,我發現在Ubuntu中處理C++中的寬文本需要設置默認語言環境。實現的行爲非常具有諷刺意味。使用UTF-8和Unix-land一樣,區域設置對於窄範圍轉換並不重要,但必須進行設置,而對於各種單字節編碼,例如在Windows中,區域設置非常重要,但默認情況下已設置。 –