有办法吗?我的电脑是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 *'
我该怎么做呢?
67up9zun1#
首先将其转换为std::wstring:
std::wstring widestr = std::wstring(str.begin(), str.end());
然后得到C字符串:
const wchar_t* widecstr = widestr.c_str();
这只适用于ASCII字符串,但如果底层字符串是UTF-8编码的,则不适用。使用MultiByteToWideChar()这样的转换例程可以确保正确处理这种情况。
0lvr5msh2#
如果你有一个std::wstring对象,你可以在它上面调用c_str()来得到一个wchar_t*:
c_str()
wchar_t*
std::wstring name( L"Steve Nash" ); const wchar_t* szName = name.c_str();
然而,由于你是在一个窄字符串上操作,你首先需要加宽它。一种是使用Windows内置的MultiByteToWideChar例程,它会给予你一个LPWSTR,等价于wchar_t*。
MultiByteToWideChar
LPWSTR
jchrr9hc3#
可以使用ATL文本转换宏将窄字符串(char)转换为宽字符串(wchar_t)。例如,要转换std::string:
#include <atlconv.h> ... std::string str = "Hello, world!"; CA2W pszWide(str.c_str()); loadU(pszWide);
您还可以指定代码页,因此如果您的std::string包含UTF-8字符,您可以用途:
CA2W pszWide(str.c_str(), CP_UTF8);
非常有用,但只有Windows。
7gyucuyw4#
如果您使用的是Linux/Unix,请查看GNU C(来自ISO C 90)中定义的mbstowcs()和wcstombs()。
有关宽字符的更多背景细节,请参阅glibc文档here。
u0njafvf5#
需要将一个wchar_t字符串传递给一个函数,并且首先能够从一个与整数变量连接的文本字符串创建该字符串。原始字符串如下所示,其中4是物理驱动器号,但我希望它可以更改,以匹配我希望传递给函数的任何驱动器号
auto TargetDrive = L"\\\\.\\PhysicalDrive4";
以下工程
int a = 4; std::string stddrivestring = "\\\\.\\PhysicalDrive" + to_string(a); std::wstring widedrivestring = std::wstring(stddrivestring.begin(), stddrivestring.end()); const wchar_t* TargetDrive = widedrivestring.c_str();
5条答案
按热度按时间67up9zun1#
首先将其转换为std::wstring:
然后得到C字符串:
这只适用于ASCII字符串,但如果底层字符串是UTF-8编码的,则不适用。使用MultiByteToWideChar()这样的转换例程可以确保正确处理这种情况。
0lvr5msh2#
如果你有一个std::wstring对象,你可以在它上面调用
c_str()
来得到一个wchar_t*
:然而,由于你是在一个窄字符串上操作,你首先需要加宽它。一种是使用Windows内置的
MultiByteToWideChar
例程,它会给予你一个LPWSTR
,等价于wchar_t*
。jchrr9hc3#
可以使用ATL文本转换宏将窄字符串(char)转换为宽字符串(wchar_t)。例如,要转换std::string:
您还可以指定代码页,因此如果您的std::string包含UTF-8字符,您可以用途:
非常有用,但只有Windows。
7gyucuyw4#
如果您使用的是Linux/Unix,请查看GNU C(来自ISO C 90)中定义的mbstowcs()和wcstombs()。
有关宽字符的更多背景细节,请参阅glibc文档here。
u0njafvf5#
需要将一个wchar_t字符串传递给一个函数,并且首先能够从一个与整数变量连接的文本字符串创建该字符串。
原始字符串如下所示,其中4是物理驱动器号,但我希望它可以更改,以匹配我希望传递给函数的任何驱动器号
以下工程