[英]how to convert from LPWSTR to 'const char*'
使用 C++/CLI 将结构从 C# 获取到 C++ 后:
public value struct SampleObject
{
LPWSTR a;
};
我想打印它的实例:
printf(sampleObject->a);
但我收到了这个错误:
错误 1 错误 C2664:“printf”:无法将参数 1 从“LPWSTR”转换为“const char *”
如何从LPWSTR to char*
转换LPWSTR to char*
?
提前致谢。
使用位于<stdlib.h><\/code>的
wcstombs()<\/code>函数。以下是如何使用它:
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);
只需使用printf("%ls", sampleObject->a)
。 在%ls
使用l
意味着您可以传递wchar_t[]
例如L"Wide String"
。
(不,我不知道为什么 L 和 w 前缀总是混合在一起)
int length = WideCharToMultiByte(cp, 0, sampleObject->a, -1, 0, 0, NULL, NULL);
char* output = new char[length];
WideCharToMultiByte(cp, 0, sampleObject->a, -1, output , length, NULL, NULL);
printf(output);
delete[] output;
这是一个简单的解决方案。 检查wsprintf
LPWSTR wideStr = "some text";
char* resultStr = new char [wcslen(wideStr) + 1];
wsprintfA ( resultStr, "%S", wideStr);
“%S”将隐式地将 UNICODE 转换为 ANSI。
使用WideCharToMultiByte()
方法转换多字节字符。
这是从 LPWSTR 转换为 char* 或从宽字符转换为字符的示例。
/*LPWSTR to char* example.c */
#include <stdio.h>
#include <windows.h>
void LPWSTR_2_CHAR(LPWSTR,LPSTR,size_t);
int main(void)
{
wchar_t w_char_str[] = {L"This is wide character string test!"};
size_t w_len = wcslen(w_char_str);
char char_str[w_len + 1];
memset(char_str,'\0',w_len * sizeof(char));
LPWSTR_2_CHAR(w_char_str,char_str,w_len);
puts(char_str);
return 0;
}
void LPWSTR_2_CHAR(LPWSTR in_char,LPSTR out_char,size_t str_len)
{
WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK,in_char,-1,out_char,str_len,NULL,NULL);
}
不要转换。
使用wprintf
而不是printf
:
请参阅说明如何使用它的示例。
或者,您可以将std::wcout
用作:
wchar_t *wstr1= L"string";
LPWSTR wstr2= L"string"; //same as above
std::wcout << wstr1 << L", " << wstr2;
同样,使用为宽字符设计的函数,忘记将wchar_t
转换为char
的想法,因为它可能会丢失数据。
在这里查看处理宽字符的函数:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.