- - PR -
16進バイナリから文字列への変換処理
1
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-06-09 21:41
stringという文字列を16進バイナリに変換した文字列
737472696E67 があるのですが、これをstringという文字列に戻したいのですが どうやればいいのでしょうか? ご教示願います。 | ||||||||
|
投稿日時: 2004-06-09 22:25
何をどうやってその文字列になったのでしょうか?
ひょっとして暗号解読のしかたが知りたいのでしょうか? | ||||||||
|
投稿日時: 2004-06-09 22:58
たぶんコード文字列的にASCIIコードだと思いますが、
Javaでは通常ユニコードを使用するのでそのコード文字列 から直接文字列にすることはできませんので 1.コード文字列(737472696E67)をバイト配列に変換 2.バイト配列から文字列を作成 という手順になると思います。 ちなみに試していないので動作するかは不明です。 悪しからず… | ||||||||
|
投稿日時: 2004-06-09 23:13
こんな感じで
byte a[] = new byte[6]; a[0] = 0x73; a[1] = 0x74; a[2] = 0x72; a[3] = 0x69; a[4] = 0x6E; a[5] = 0x67; String b = new String(a,"8859_1"); どうでしょう | ||||||||
|
投稿日時: 2004-06-09 23:20
一応サンプルで作ってみました
一応ちゃんとASCIIから文字列に復元されました public class AsciiTest { public static void main(String[] args){ String input = null; byte[] buffer = null; byte[] bytes = null; String str = null; try{ input = args[0]; buffer = new byte[input.length()]; for(int i = 0; i < input.length(); i++){ buffer[i] = Byte.parseByte(Character.toString(input.charAt(i)), 16); } bytes = new byte[buffer.length / 2]; for(int i = 0; i < bytes.length; i++){ bytes[i] = (byte)(buffer[2 * i] * 16 + buffer[2 * i + 1]); } str = new String(bytes, "US-ASCII"); System.out.println(str); }catch(Exception e){ e.printStackTrace(); } } } | ||||||||
|
投稿日時: 2004-06-10 10:26
皆様、ご回答ありがとうございます。
やはり一撃というわけにはいかないですね。 この文字列を送ってきた者に確認すると日本語文字列も あるようなので、さらに面倒なことになりそうです・・・。 | ||||||||
|
投稿日時: 2004-06-10 12:05
こんにちは、jack_pmaと申します。
これ、Stringをbyte配列にしてnew Stringで文字列化しているわけですから、日本語が入っても最後にStringにする時のエンコーディングだけ間違えなければ大丈夫じゃないですかね。 ところで、私は横着者なので↓こんな感じに作ってみました。 でも、ぼんじぃさんの例(日本語はどっちも通るでしょう)のが速いかな・・・やってることはほぼ同じですからどっちがいいってものではないですがせっかく書いちゃったのでこれも載せておきます
| ||||||||
|
投稿日時: 2004-06-10 12:21
jack_pmaさんに指摘されるまで、最後のnew Stringで
文字コードを誤って解釈していました・・・。 コード的にはjack_pmaさんのほうがオブジェクト的で私好みですが やはりぼんじぃさんの方が速そうで魅力的です。 ちょっと検証してみます。 | ||||||||
1
