如何转换LPWSTR到'const char*'

oli*_*dev 4 c++ c++-cli

使用C++/CLI从C#到C++获取结构后:

public value struct SampleObject
{   
    LPWSTR a;    
};
Run Code Online (Sandbox Code Playgroud)

我想打印它的实例:

printf(sampleObject->a);
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个错误:

错误1错误C2664:'printf':无法将参数1从'LPWSTR'转换为'const char*'

我怎样才能转换LPWSTR to char*

提前致谢.

Iva*_*ali 19

使用wcstombs()位于的功能<stdlib.h>.以下是如何使用它:

LPWSTR wideStr = L"Some message";
char buffer[500];

// First arg is the pointer to destination char, second arg is
// the pointer to source wchar_t, last arg is the size of char buffer
wcstombs(buffer, wideStr, 500);

printf("%s", buffer);
Run Code Online (Sandbox Code Playgroud)

希望这有助于某人!这个功能让我免于很多挫折.


MSa*_*ers 5

只需使用printf("%ls", sampleObject->a)。使用lin %ls表示您可以传递wchar_t[]诸如L"Wide String"

(不,我不知道为什么L和w前缀总是混在一起)


Naw*_*waz -1

不要转换。

使用wprintf而不是printf

请参阅解释如何使用它的示例。

或者,您可以用作std::wcout

wchar_t *wstr1= L"string";
LPWSTR   wstr2= L"string"; //same as above
std::wcout << wstr1 << L", " << wstr2;
Run Code Online (Sandbox Code Playgroud)

wchar_t同样,使用为宽字符设计的函数,并忘记转换为的想法char,因为它可能会丢失数据。

在这里查看处理宽字符的函数:

  • 不,我还需要将其转换为执行其他操作。我问这个问题的原因是因为我首先需要调试以查看从 C# 到 C++ 的传递对象是否工作 (5认同)