• ベストアンサー

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)になってしまう。 原因がわかる方いらっしゃれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

その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」という文字列が作られるはずです。

参考URL:
http://www.atmarkit.co.jp/fdotnet/dotnettips/010str2byte/str2byte.html
tama_sr
質問者

お礼

なるほど! 内部的にunicodeを使っていたのですね。 解決しました。ありがとうございました。

その他の回答 (2)

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★下の参考文献をどうぞ。 ・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→『バイト列と数値を変換するには?』

tama_sr
質問者

お礼

リンク、参考にさせていただきます。 ありがとうございました!

回答No.1

これで出来ませんか? string s = code.ToString("X");

tama_sr
質問者

お礼

早速のご回答ありがとうございます。 この方法ですと、(s==F97E==0x46393745)となり、 "F97E"という文字列が生成されてしまいます。 今回は、"(外字)"==0xF97E という文字列を生成したい次第です。 説明がわかりにくくて申し訳ございませんでした。 よろしくお願いします。

関連するQ&A