我有一個char*
格式的字符串,並且想將它轉換爲wchar_t*
,以傳遞給Windows函數。如何將char字符串轉換爲wchar_t字符串?
7
A
回答
13
這個小功能有幫助嗎?
#include <cstdlib>
int mbstowcs(wchar_t *out, const char *in, size_t size);
8
如果你不想對C運行時庫鏈接,使用的MultiByteToWideChar API調用,例如:
const size_t WCHARBUF = 100;
const char s[] = "HELLO";
wchar_t wszDest[WCHARBUF];
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szSource, -1, wszDest, WCHARBUF);
2
Windows SDK中指定2個功能在kernel32.lib中用於將字符串轉換爲寬字符集。那些是MultiByteToWideChar()
和WideCharToMultiByte()
。
請注意,與函數名稱建議不同,字符串不一定使用多字節字符集,但可以是簡單的ANSI字符串。請注意,這些函數將UTF-7和UTF-8理解爲多字節字符集。寬字符字符集總是UTF-16。
1
schnaader的答案使用由當前的C語言環境中定義的轉換,這一個使用C++語言環境界面(誰說,這是簡單?)
std::wstring widen(std::string const& s, std::locale loc)
{
std::char_traits<wchar_t>::state_type state = { 0 };
typedef std::codecvt<wchar_t, char, std::char_traits<wchar_t>::state_type >
ConverterFacet;
ConverterFacet const& converter(std::use_facet<ConverterFacet>(loc));
char const* nextToRead = s.data();
wchar_t buffer[BUFSIZ];
wchar_t* nextToWrite;
std::codecvt_base::result result;
std::wstring wresult;
while ((result
= converter.in
(state,
nextToRead, s.data()+s.size(), nextToRead,
buffer, buffer+sizeof(buffer)/sizeof(*buffer), nextToWrite))
== std::codecvt_base::partial)
{
wresult.append(buffer, nextToWrite);
}
if (result == std::codecvt_base::error) {
throw std::runtime_error("Encoding error");
}
wresult.append(buffer, nextToWrite);
return wresult;
}
相關問題
- 1. 如何將wchar_t *轉換爲字符串?
- 2. 將char字符串轉換爲字符
- 3. 如何將char []轉換爲字符串?
- 4. 如何將char []轉換爲字符串&
- 5. 如何將char轉換爲字符串?
- 6. 如何將char轉換爲字符串?
- 7. 如何將char字符串轉換爲std字符串
- 8. 如何將wchar_t(或wchar_t *或CORBA :: WChar *)轉換爲字符串?
- 9. 在Java中,如何將字符串轉換爲char或char字符串?
- 10. 如何將字符串成char []轉換
- 11. 將字符串內部的char字符串轉換爲lowerCase/upperCase
- 12. 的strtok():將字符串轉換爲char *
- 13. C++將char轉換爲字符串
- 14. 將字符串轉換爲char *
- 15. 將字符串變量轉換爲char
- 16. 將字符串轉換爲char [] - Java
- 17. 將int和char轉換爲字符串
- 18. 將char轉換爲字符串
- 19. 將字符串轉換爲char?
- 20. 將char轉換爲字符串
- 21. 將字符串轉換爲字符串
- 22. 將字符串轉換爲字符串
- 23. 將字符串轉換爲字符串
- 24. 如何將字符串的字符串轉換爲字符?
- 25. C++ Builder XE2:如何將字符串轉換爲wchar_t *
- 26. 字符串爲char *轉換爲非靜態字符串失敗
- 27. 如何將字符串數字轉換爲int然後char?
- 28. 如何將字符串文字轉換爲字符串值
- 29. 如何將JTextField轉換爲字符串和字符串爲JTextField?
- 30. 瞭解將使用哪種swprintf(或再次將char *字符串轉換爲wchar_t *)
大多數Windows功能實際上有兩種版本,一種是「A 「和」W「版本。例如。 MessageBoxA/MessageBoxW,帶有一個宏「MessageBox」,指向其中一個。但是,如果您使用明確的'MessageBoxA'名稱,則可以獨立於項目設置傳遞'char *'。 – MSalters 2009-11-26 14:27:54