
Ubuntu日本語フォーラム

ログインしていません。
HEXコードをASCIIコードに変換したいのですが
echo 'HEXコード' | perl -lne 'print pack("H*", $_)'
とやると
��:�*�
Ubuntu@Ubuntu:~$
このように映ります。
どうすれば変換ができますか?
もしくは変換するサイトやツール、アプリ(exeでも)あったら教えていただきたいです。
オフライン
目的がよく分かりませんが、
$ echo 'HEXコード' |hexdump -C
00000000 48 45 58 e3 82 b3 e3 83 bc e3 83 89 0a |HEX..........|
0000000d
見たいな感じで表示したいのですか?
オフライン
「期待通り動いたらどうなるか」の、「入力」と「出力」の具体例を挙げると良いかと思います。
・動かない例
・期待と違ったスクリプト
のみ掲載されていても、結局なにをしようとしていたのかを想像するのは困難です。
オフライン
すみません。
文字での表示をさせたいです。
93,D3,3C,62,A9
これを変換したいのですがAとかPとか英数で表示させたいです。
オフライン
以下のような動作と言うことでしょうか?(あくまでもイメージです)
$ echo '31,32,41,42,43' | (なんかコマンド)
12ABC
$
上記のような動作だとすると、多少調整が必要ですが、最初ので、ほぼ正しいはずです(動作未確認)。
echo '93D33C62A9' | perl -lne 'print pack("H*", $_)'
# US-ASCIIには、00~7Fまでしかないので注意。UTF8やShiftJISなど、別のキャラクターエンコードを想定していて、それが実行している環境のキャラクターエンコード(例えば、日本語版のMS-WindowsならShiftJISモドキのCP932とか)と異なる場合は、(人間が読めるように表示するには)変換が必要です。
echo '3132414243' | perl -lne 'print pack("H*", $_)'
と試して、
12ABC
と表示されれば、(US-ASCIIに限定すれば)方法は正しい ということになります。
オフライン
12ABCとは表示されますね。
echo '93D33C62A9' | perl -lne 'print pack("H*", $_)'
をした場合はなぜか
��<b�
と映ってしまいます。
オフライン
sony5614 による投稿:
12ABCとは表示されますね。
echo '93D33C62A9' | perl -lne 'print pack("H*", $_)'
をした場合はなぜか
��<b�
と映ってしまいます。
であるなら、あなたが試しているキャラクターエンコードの環境では、その文字がが該当するということになります。
それ以上のこと(前提やどうなるはず といったこと)は、なにも書かれていないので、判りません。
試す/調べるとしたら、
・キャラクターエンコードを正しいものに修正する(なにが正しい(はずの)ものなのかは、本人にしかわかりません)
・本当にデータに誤りがないのか、確認する(もとのデータを知っている、本人にしかわかりませんし、他の人がすることも出来ません)
・本来、人間が読める文字(読むための文字コードのデータ)だったのかどうか を確認する(もともと読めるように作られて無いなら、どうやっても読めません。)
・元データを取得する際に、変化してしまっていないかを確認する。
あたりになるかと思います。
結局のところ、元のデータの出ところや、どう使われていたものなのかを総合的に判断して、どうすれば欲しかった形にできるのかを判断するしかありません。
オフライン
sony5614 による投稿:
12ABCとは表示されますね。
echo '93D33C62A9' | perl -lne 'print pack("H*", $_)'
をした場合はなぜか
��<b�
と映ってしまいます。
デフォルトの言語環境だと、 93, D3, A9 は、表示文字には有りません。
もし、Shift-JISコードならば、端末の表示を、Shift-JISに変えてみてください。
ただ、この場合も、A9 は�となります。
また、日本語以外の文字ならば、言語を変更してみてください。
オフライン
手軽に試したいのなら、バイナリエディタを使われてみてはいかがですか?
大概のものが表示部分のエンコードを指定できると思います。
Ubuntu用のは知りませんが、Windowsだとbzエディタとか。
オフライン
別解
予想される文字コードを標準のUTF-8に変換してみる
(CentOS5での結果ですので、Ubuntuとは一部異なる場合があります
$ echo '93D33C62A9' | perl -lne 'print pack("H*", $_)'|iconv -f CP932 -t UTF-8
噸<bゥ
オフライン
文字コードとは違う方向での話ですが「93D33C62A9」自体が間違いで予想した結果が返ってこないのでしたら
以前にインストールした?GHex(hex editor)の「検索」機能を使えば、任意の文字を入力すると16進数に変換、逆に調べたい16進数を入力すると(対応していれば)文字列に変換してくれます。
テキストファイル等を適当に読み込んで「メニュー」から「編集(E)」→「検索」で左の窓が16進数に、右の窓は文字列に対応していますので、どちらか一方に入力してみてください。
オフライン
このtopicの質問はもともと別にやりたいことがあって、それを実現していく過程で出てきた問題なのではないですか?
だとしたら、もともとやりたかったことも併せて書いたほうが回答が付きやすいんじゃないかと思います。
93,D3,A9はいわゆるASCIIコードの範囲内の値ではないので、少なくともこの3つはアルファベットで表示されることはありません。
他のみなさんもおっしゃる通り他のエンコードを適用することで意味のある文字に表示されるかもしれませんが、日本語が関連するエンコードではいずれもこの値の列で有意な文字になることはないようです。
オフライン
例えば#12で言う所の右の窓に、文字を入力すれば16進数で表示されます。
Ubuntuと入力すると 55 62 75 6E 74 75 と対応する値が表示されますが、任意の文字の値を調べたいのでは無く93 D3 3C 62 A9 を何らかの文字列に変換したいのでしたら#12はお望みの解答ではないようですね。
オフライン