- ベストアンサー
int → char → string の変換
お世話になります。 現在 VisualStudio2005 C# のコンソールアプリを作っています。 以下の場合どのようにすれば解決しますでしょうか? int code = 0xF97E; // この値をF97Eという文字(外字)にしたい 以下のように記述してみましたが、駄目でした。 int hex1 = ((code & 0xff00) >> 8); // (hex1==0xF9)になる int hex2 = (code & 0x00ff); // (hex2==0x7E)になる string s = char.ToString((char)hex1) + char.ToString((char)hex2 )); // (s==u~==0x757E)になってしまう。 原因がわかる方いらっしゃれば教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
その0xF97Eという値は、シフトJISでのコードでしょうか? .NET FrameworkはUNICODEで内部処理をしているようです。 そのためシフトJISでのコードであれば、UNICODE→シフトJISへの変換が必要となります。 サンプルです。 int code = 0xFA46; // シフトJISで「ⅶ」の文字コード byte[] b = new byte[2]; b[0] = (byte)((code & 0xff00) >> 8); b[1] = (byte)(code & 0xff); Encoding enc = Encoding.GetEncoding("Shift_JIS"); string s = enc.GetString(b) + "= 0x" +code.ToString("X"); これで、「ⅶ = 0xFA46」という文字列が作られるはずです。
その他の回答 (2)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★下の参考文献をどうぞ。 ・http://www.atmarkit.co.jp/fdotnet/dotnettips/010str2byte/str2byte.html→『文字列をシフトJISとしてバイト列に変換するには?』 ・http://www.atmarkit.co.jp/fdotnet/dotnettips/011byte2str/byte2str.html→『バイト列を文字列に変換するには』 ・http://www.atmarkit.co.jp/fdotnet/dotnettips/045getbytes/getbytes.html→『バイト列と数値を変換するには?』
お礼
リンク、参考にさせていただきます。 ありがとうございました!
- nihon_no_samurai
- ベストアンサー率20% (5/24)
これで出来ませんか? string s = code.ToString("X");
お礼
早速のご回答ありがとうございます。 この方法ですと、(s==F97E==0x46393745)となり、 "F97E"という文字列が生成されてしまいます。 今回は、"(外字)"==0xF97E という文字列を生成したい次第です。 説明がわかりにくくて申し訳ございませんでした。 よろしくお願いします。
お礼
なるほど! 内部的にunicodeを使っていたのですね。 解決しました。ありがとうございました。