• ベストアンサー

日本語の変換の問題

char * buff = "あいうえお"; があります。それを16進数に変換したいですが、 どうすれば、よろしいですか? よろしくお願いします。

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

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.5

こういう質問をする場合、 -------------- char * buff = "あいうえお"; があります。 漢字コードは「シフトJIS」で、メモリ中には、16進コードで「82 A0 82 A2 82 A4 82 A6 82 A8 00」と入っているとします。 シフトJIS漢字の第1バイトが左、第2バイトが右です。 終端文字も入っています。 文字列に半角文字は入りません。半角カナも入りません。全角の2バイト文字しか入って来ない事とします。 それを「16進数表記した文字列」に変換したいですが、どうすれば、よろしいですか? 結果は "82A082A282A482A682A8" と言う文字列で欲しいです。 文字列の終端には「\0」つまり「終端文字」も欲しいです。 バイトの区切りに空白などは必要ありません。隙間なく並んでいれば良いです。 16進数の英字A~Fは「大文字」で欲しいです。 16進コードでメモリ中に「38 32 41 30 38 32 41 32 38 32 41 34 38 32 41 36 38 32 41 38 00」と並んでいるイメージです。 -------------- と、質問しましょう。 回答者は「あいうえお、と言われても、漢字コードは何?JIS?シフトJIS?EUC?UTF-8?漢字コード体系が何なのか、書いてないと判らない」です。 「16進数に変換したい」と言っても「じゃあ、具体的に、どういう結果が欲しいの?AからFは大文字?小文字?どっち?書いてないと判らない」です。 そういう「細かい仕様」をハッキリ書かないから、ANo1やANo2のような「ツッコミ」が入るのです。 この回答の補足説明で、上記のような「細かい仕様」を明記して下さい。そうすれば、貴方が欲しい回答が得られるでしょう。

その他の回答 (4)

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.4

>char * buff = "あいうえお";があります。 >それを16進数に変換したいですが、どうすれば、よろしいですか? (#1 補足) >逆に、16進数の文字列が与えられたら、それを日本語にしたいです。  「2バイト文字」文字列を、1つの「数」に「変換」するのではなく、     ・1つの「2バイト文字」コードを16進4桁「文字列」とし、それらを連結。  と質問本文主旨を「変更・修正」したと解釈してのアドバイス。 「解釈」に誤りがありましたら以降、無視して下さい。 ++++++++++++++++++++++++++++++++++++++++++++++++ "あ" は 82A0, 順に 82A2, ・・だから "82A082A282A482A682A8" といった「文字列」を作るのはいたって簡単↓。  (BorlandC++5.5.1)    http://www.k-cube.co.jp/wakaba/server/format.html 逆の、"82A082A282A482A682A8" を "あいうえお" と2バイト文字「表記」するには、下のソースの後半、代入部分を参考にして下さい。  ヒント:「文字列」"82" と "A0" を「数」0x82 と 0xA0 にする。    http://e-words.jp/p/r-ascii.html #include <stdio.h> void main() {  unsigned char cStr[ 16 ] = "あいうえお";  unsigned char *p = cStr;  char c16[ 32 ];  int nn = 0;  while( *p ){   sprintf( &c16[ nn ], "%02X", *p );   nn += 2;   p++;  }  printf( "%s\n", c16 );  printf( "%s\n", cStr );  cStr[ 1 ] = 0xA8;  cStr[ 3 ] = 0xA6;  cStr[ 5 ] = 0xA4;  cStr[ 7 ] = 0xA2;  cStr[ 9 ] = 0xA0;  printf( "%s\n", cStr ); } 注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

文字コードの数値を16進数型式で表示したいという意味でしょうか for (i = 0; buf[ i ] != 0; i++) { printf("%02X ", (unsigned char)buf[ i ]); }

  • Gizensha
  • ベストアンサー率34% (207/608)
回答No.2

No1氏の質問を言い換えてみます。 ”あいうえお”からどのような十六進がほしいのですか。 文字列を種にした乱数としての十六進数なのか、ビットマップファイルに出力した後のファイルダンプとしてなのか、EBCDICコードで表現したときの文字コードなのか。"あ"→0と見なしての変換なのか。 情報が少なすぎてどうしようもありません。

ikutame
質問者

補足

すみませんが、以上のような状況じゃないと思いますが、 Stirlingというエディタのように、日本語を16進数(二進数)に変換と 16進数(二進数)を日本語に変換するようなイメージですが、 あまり、わかりませんが、乱数とファイルダンプなどとは、 関係があるでしょうか? ご指摘をお願いします。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

どのような結果が欲しいですか?

ikutame
質問者

補足

それらの文字列の16進数がほしいです。 逆に、16進数の文字列が与えられたら、それを日本語にしたいです。 よろしくお願いします。

関連するQ&A