如何从 LPWSTR 转换为 'const char*'
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*
转换?
提前谢谢。
使用位于<stdlib.h>
中的wcstombs()
函数。以下是使用方法:
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;
使用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,' ',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);
}
这里有一个简单的解决方案。检查wsprintf
LPWSTR wideStr = "some text";
char* resultStr = new char [wcslen(wideStr) + 1];
wsprintfA ( resultStr, "%S", wideStr);
"%S"将隐式地将UNICODE转换为ANSI。
不要转换。
使用wprintf
而不是printf
:
- wprintf
请参阅解释如何使用它的示例。
或者,您可以将std::wcout
用作:
wchar_t *wstr1= L"string";
LPWSTR wstr2= L"string"; //same as above
std::wcout << wstr1 << L", " << wstr2;
类似地,使用为宽字符设计的函数,忘记将wchar_t
转换为char
的想法,因为这可能会丢失数据。
看看这里处理宽字符的函数:
- Visual C中的Unicode++
相关文章:
- 在字符串函数中抛出'char const*'实例后调用的终止
- 双重标准?为什么只有 char* const&a = "bla" 的警告?
- 包括"lvtocon.h",未定义对'operator<<(std::ostream&, char const*)的引用
- 为什么 const char* const & = 可以编译"hello"?
- 将字符串文本常量定义为 char const* 和 wchar const*
- 如何将std::wstring转换为char const[]
- "char const * name() const _WEBSOCKETPP_NOEXCEPT_TOKEN_ {"剂量是什么意思
- 使用提升对字符串进行标记化时,将令牌转换为 char* const* 时失败
- 如何从 std::initializer_list<char const* 构建 std::vector<std::string>>
- 将 std::vector<std::string> 转换为 const char* const*
- 引发"char const*"错误的实例后调用的终止
- 将const char * const参数成员分配给新值
- 从'const char**'到'char* const*'的转换无效
- 从 sub_match<常量字符 *>' 转换为'const char *const &'
- char*const和constchar*之间有什么区别?(重复-需要更多澄清)
- 使用工厂方法时编译器错误:无法转换"const std::p air<char* const
- HEVC 解码器端口 Android 警告:从 'signed char*' 到 'char const* 的转换无效*
- 如何从'char const*'中删除常量
- 'char const *str'作为模板参数
- 为什么不;t strlen(.)应为const char*const str,而不是const char*