2009-11-24 17 views
8

どのようにTCHAR[]char[]に変換するのですか?TCHAR配列をchar配列に変換する

+0

重複:http://stackoverflow.com/questions/159442/what-is-the-simplest-way-to-convert-char-to-from-tchar-in-c-cms – Noldorin

+1

この意志あなたは間違いなくあなたを助けます:http://www.codeproject.com/Articles/76252/What-are-TCHAR-WCHAR-LPSTR-LPWSTR-LPCTSTR-etc – Ajay

+1

私はただ一般 - >文字セットを変更します:= "ユニコード文字セットを使用する"現在は作業中(char *)のtcharrです。 – user956584

答えて

2

TCHARは、charまたはwchar_t(ワイド文字)のMicrosoft固有のtypedefです。

charへの変換は、実際にこれらのどれに依存しますか。 TCHARが実際にcharである場合、単純なキャストを行うことができますが、それが本当にwchar_tの場合は、文字セット間で変換するルーチンが必要になります。あなたは、任意の鋳造なしのcharになりますANSI単にTCHARを使用しているので、もし、それが文字セット(UnicodeまたはANSI)(wchar_t型またはchar)に依存する関数MultiByteToWideChar()

+0

私たちはWidecharToMultiByteが必要なので、wchar_tからcharに変換する必要があると思います! –

1

を参照してください、しかし、ユニコードのためにあなたから変換する必要がありますwchar_tをcharに変換すると、WideCharToMultiByte

8

正直なところ私は配列を使ってポインタを使って行う方法が分かりません。wctombwcstombsのようなAPIをMicrosoftから提供しています。最初のものは第2のものより安全性が低い。ですから、あなたは1つの配列からポインタへと1つのポインタから配列へのキャストで達成したいことができると思います。

// ... your includes 
#include <stdlib.h> 
// ... your defines 
#define MAX_LEN 100 
// ... your codes 
// I assume there is no any defined TCHAR array to be converted so far, so I'll create one 
TCHAR c_wText[MAX_LEN] = _T("Hello world!"); 
// Now defining the char pointer to be a buffer for wcstomb/wcstombs 
char c_szText[MAX_LEN]; 
wcstombs(c_szText, c_wText, wcslen(c_wText) + 1); 
// ... and you're free to use your char array, c_szText 

PS:最高の解決策ではありませんが、少なくとも機能し、機能しています。

0

wcstombs_sを使用しないのはなぜですか?

どのようにシンプルであるかを示すコードです。

#define MAX_LENGHT 500 
... 

TCHAR szWideString[MAX_LENGHT]; 
char szString[MAX_LENGHT]; 
size_t nNumCharConverted; 
wcstombs_s(&nNumCharConverted, szString, MAX_LENGHT, 
     szWideString, MAX_LENGHT); 
関連する問題