- 締切済み
WideCharToMultiByte関数で変換される文字コートについて
いつもお世話になります。 現在Windows Mobile端末上で文字コードをUnicode→S-JISに変換するのに 表記関数を使用しているのですが、下記問題に悩まされております。 基本的な質問で申し訳ないのですがよろしくお願いします。 ■Windows Mobile機でWideCharToMultiByte()を使用し"aあ"を文字コード変換した場合に 得られた変換結果pszCharをデバッガで表示すると →pszChar[0] = 0x61 'a' ←OK →pszChar[1] = 0xff82 'ツ' ←char配列の要素に2バイトの値が入っている??本来は0x82では? →pszChar[2] = 0xffa0 '□' ←char配列の要素に2バイトの値が入っている??本来は0x61では? デバッグ表示したときの上記"ff"はどういうものなのでしょうか? (1バイトの要素内に2バイト分入っている??) 試しにWindows PC上で同じように変換してみたのですが、このときは →pszChar[0] = 0x61 'a' →pszChar[1] = 0x82 →pszChar[2] = 0xa0 '・' というように意図する結果となりました。 (ただ、差異としてWideCharToMultiByteを使うときのCodePageがWM機はCP_ACP、 Windows PC時はCP_THREAD_ACPを使いました。WM機に対してCP_THREAD_ACPを使うと変換できなかったため) 文字コードに関しての知識不足のせいだとは思いますが、ご存知の方がいらっしゃいましたら何卒よろしくお願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
→pszChar[1] = 0xff82 'ツ' ←char配列の要素に2バイトの値が入っている??本来は0x82では? →pszChar[2] = 0xffa0 '□' ←char配列の要素に2バイトの値が入っている??本来は0x61では? は 2バイトの値が入っているのではなく『負の値』つまり -であるという表現です 実際に代入されている値は 0x82、0xA0です pszCharの宣言を unsigned char pszChar[256]; などと符号無しcharとして宣言しておけば 0xFFxxといった表現はされません 呼び出し時に LPSTRにキャストが必要になってしまいますが ・・・
お礼
>>redfox63様 ご回答どうもありがとうございます。 お蔭様ですっきりすることができました。