アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になります。
現在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を使うと変換できなかったため)

文字コードに関しての知識不足のせいだとは思いますが、ご存知の方がいらっしゃいましたら何卒よろしくお願い致します。

A 回答 (1件)

→pszChar[1] = 0xff82 'ツ' ←char配列の要素に2バイトの値が入っている??本来は0x82では?


→pszChar[2] = 0xffa0 '□' ←char配列の要素に2バイトの値が入っている??本来は0x61では?
は 2バイトの値が入っているのではなく『負の値』つまり -であるという表現です
実際に代入されている値は 0x82、0xA0です

pszCharの宣言を
unsigned char pszChar[256];
などと符号無しcharとして宣言しておけば 0xFFxxといった表現はされません

呼び出し時に LPSTRにキャストが必要になってしまいますが ・・・
    • good
    • 0
この回答へのお礼

>>redfox63様
ご回答どうもありがとうございます。
お蔭様ですっきりすることができました。

お礼日時:2009/04/28 09:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!