Вопрос

Есть ли какой-нибудь метод?Мой компьютер AMD64.

::std::string str;
BOOL loadU(const wchar_t* lpszPathName, int flag = 0);

Когда я использовал:

loadU(&str);

компилятор VS2005 говорит:

Error 7 error C2664:: cannot convert parameter 1 from 'std::string *__w64 ' to 'const wchar_t *'

Как мне это сделать?

Это было полезно?

Решение

Если у вас есть объект std :: wstring, вы можете вызвать для него c_str () , чтобы получить wchar_t * :

std::wstring name( L"Steve Nash" );
const wchar_t* szName = name.c_str();

Поскольку вы работаете с узкой строкой, вам сначала нужно ее расширить. Здесь есть различные варианты; Одним из них является использование встроенного в Windows <кода > MultiByteToWideChar . Это даст вам LPWSTR , который эквивалентен wchar_t * .

Другие советы

Сначала преобразуйте его в std :: wstring:

std::wstring widestr = std::wstring(str.begin(), str.end());

Затем получите строку C:

const wchar_t* widecstr = widestr.c_str();

Это работает только для строк ASCII, но не будет работать, если основная строка имеет кодировку UTF-8. Использование процедуры преобразования, такой как MultiByteToWideChar (), гарантирует, что этот сценарий обрабатывается правильно.

Вы можете использовать макросы преобразования текста ATL для преобразования узкой (char) строки в широкую (wchar_t). Например, чтобы преобразовать std :: string:

#include <atlconv.h>
...
std::string str = "Hello, world!";
CA2W pszWide(str.c_str());
loadU(pszWide);

Вы также можете указать кодовую страницу, поэтому, если ваша строка std :: содержит символы UTF-8, вы можете использовать:

CA2W pszWide(str.c_str(), CP_UTF8);

Очень полезно, но только для Windows.

Если вы используете Linux/Unix, обратите внимание на mbstowcs() и wcstombs(), определенные в GNU C (из ISO C 90).

  • mbs означает «многобайтовая строка» и по сути представляет собой обычную строку C с нулевым завершением.

  • wcs означает «широкая строка символов» и представляет собой массив wchar_t.

Более подробную информацию о широких символах можно найти в документации glibc. здесь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top