potuです。お世話になってます。
今回の質問は、文字の変換についてです。
Unicode → char を行いたいと思っています。
wchar_t wszBuf[30];
で定義した変数に、Unicode文字を格納します。
例:)「12」という文字を渡すと、
wszBuf[0] = 49
wszBuf[1] = 50
が入ります。
それを、char型に変換したいのです。
WideCharToMultiByteを使用して書いたプログラムを下記に載せます。
------ここから
//格納エリアの定義
char sszBuf[100];
WideCharToMultiByte(
CP_ACP,
WC_SEPCHARS,
wszBuf, //Unicodeの文字列
-1,
sszBuf,
len, //取ってきたwszBufの長さ
NULL,
NULL);
------ここまで
エラーは起きないのですが、値が「sszBuf」に格納されません。
プログラムのエラーと思うのですが・・・。
環境は、Win2000, VC6.0, コンソールアプリで作成しています。
ご教授をお願いいたします。
OLE2T をもちいては…?
putuです。自己レスです。
変更点は、
①「char sszBuf[100];」を
「char *psBuf = (char *)malloc(len * 2 + 1);」に変更。
②WideCharToMultiByteの「WC_SEPCHARS,」の部分を「0」に、
長さも「len」から「len * 2」に変更。
③配列のゼロクリアも加えてみたり。
WideCharToMultiByteの「WC_SEPCHARS,」の部分は「0」じゃないとダメなのでしょうか?
正常に変換できたプログラムを下記に載せておきます。
お騒がせしました。
----------ここから
char *psBuf = (char *)malloc(len * 2 + 1);
//ゼロクリア
ZeroMemory(psBuf, len * 2 + 1);
WideCharToMultiByte(
CP_ACP,
0,
wszBuf,
-1,
psBuf,
len * 2,
NULL,
NULL);
----------ここまで
> WideCharToMultiByteの「WC_SEPCHARS,」の部分は「0」じゃないとダメなのでしょうか?
そのようです。
どなたかフォロープリーズ。
ところでWideCharToMultiByteの第6パラメータに取ってきたwszBufの長さを与えています
が、正しくは新しい文字列を受け取るバッファのサイズ、つまりlen * 2 + 1を与えるべき
でしょうね。
ではでは。
シルク法度さん、駄犬さん レスありがとうございます。
・シルク法度さん
私が「potu 2002/08/22(木) 23:08:42」を書いているときに
レス頂いたのですね(汗)
「送信」を押してすぐにIE終了させたので、レス頂いていたのに気づいていませんでした。
すみません m(__)m
「OLE2T」についても調べてみようと思います。ありがとうございます。
・駄犬さん
>> WideCharToMultiByteの「WC_SEPCHARS,」の部分は「0」じゃないとダメなのでしょうか?
>そのようです。
>ところでWideCharToMultiByteの第6パラメータに取ってきたwszBufの長さを与えています
>が、正しくは新しい文字列を受け取るバッファのサイズ、つまりlen * 2 + 1を与えるべき
>でしょうね。
勉強になります。ありがとうございます。
レス頂いたシルク法度さん、駄犬さんに感謝です。 m(__)m