簡體   English   中英

如何從 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*轉換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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM