У меня есть строка в формате char*
и хотел бы преобразовать ее в wchar_t*
, чтобы перейти к функции Windows.Как преобразовать строку char в строку wchar_t?
ответ
Помогает ли эта небольшая функция?
#include <cstdlib>
int mbstowcs(wchar_t *out, const char *in, size_t size);
Также см C++ reference
Если вы не хотите, чтобы связать с библиотекой C во время выполнения, используйте API вызова MultiByteToWideChar, например:
const size_t WCHARBUF = 100;
const char s[] = "HELLO";
wchar_t wszDest[WCHARBUF];
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szSource, -1, wszDest, WCHARBUF);
винда SDK определяет 2 функции в kernel32.lib для преобразования строк из и в широкий набор символов. это MultiByteToWideChar()
и WideCharToMultiByte()
.
Обратите внимание, что в отличие от названия функции строка не обязательно использует многобайтовый набор символов, но может быть простой строкой ANSI. alse обратите внимание, что эти функции понимают UTF-7 и UTF-8 как многобайтовые символы. широкий набор символов символов всегда UTF-16. Ответ
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 в C?
- 2. Как преобразовать wchar_t ** в char **?
- 3. Как преобразовать char [] в строку?
- 4. Преобразование wchar_t * в строку
- 5. преобразовать строку в char c
- 6. Невозможно преобразовать строку [] в char []
- 7. Как преобразовать char/* в wchar_t/* --- но
- 8. Как преобразовать char [] в строку в java?
- 9. Как преобразовать строку в char в C
- 10. Как преобразовать строку в char * в C++?
- 11. Как преобразовать строку в char * в C++?
- 12. Преобразование между wchar_t * в строку
- 13. Как преобразовать jstring в wchar_t *
- 14. Как преобразовать строку = "\ t" в char
- 15. Как преобразовать строку lua в C char *?
- 16. Как преобразовать char * filename в строку?
- 17. C++ Как преобразовать строку в char *
- 18. C# - Как преобразовать строку в char?
- 19. Как преобразовать строку в char * agv []
- 20. Как преобразовать символ char * в строку *?
- 21. Как преобразовать указатель char * в строку C++?
- 22. Как преобразовать строку C++ в char *?
- 23. Как преобразовать символ char * в строку?
- 24. как преобразовать строку чисел в char
- 25. Нужно преобразовать char * (pointer) в wchar_t * (pointer)
- 26. Преобразование wchar_t в char
- 27. Pascal: преобразовать строку в некоторый char
- 28. Как преобразовать строку в символ (в строку)
- 29. преобразовать строку в unsigned char str
- 30. преобразовать строку в char с ключом коммутатора
функции Большинство Windows, на самом деле в двух вариантах, A «A "и" W ". Например. MessageBoxA/MessageBoxW, с макросом «MessageBox», ссылающимся на один из двух. Но если вы используете явное имя 'MessageBoxA', вы можете передать' char * 'независимо от параметров проекта. – MSalters