"od"コマンドの出力結果について

このQ&Aのポイント
  • 質問者はUnixの"od"コマンドの出力結果について疑問を持っています。
  • "od"コマンドを使用して文字コードを確認した際に、予期しない結果が得られたようです。
  • この現象はOS環境や漢字コードの設定に関係している可能性があります。
回答を見る
  • ベストアンサー

"od"コマンドについて

Unixの"od"コマンドの出力結果について「?」があります。 以下のようにコマンド入力しました。 $ echo あ | od -x 0000000 a082 000a 0000003 「あ」の文字コードは0x82A0のはずですが、"od"コマンドの出力結果は"a082"となります。 これはどうしてでしょうか? 困っているわけではないのですが、すごーく気になるので、どなたか教えてください。 OS環境はRedHat Linux7.3で、TeraTermを使ってログインし、コマンドを入力しています。 TeraTermの漢字コードは「SJIS」にしています。 「EUC」に設定した場合でも同様の現象です。

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

  • ベストアンサー
  • nightowl
  • ベストアンサー率44% (490/1101)
回答No.2

CPU アーキテクチャは Intel ですね? Intel CPU においては「リトルエンディアン(little endian)」という形式で データが転送されたり格納されたりします。 これはどういうことかというと、2バイト以上の長さのデータでは 上位バイトと下位バイトが逆転するのです。 それで本来 0x82,0xa0 という並びになるはずの数値が 0xa0,0x82 という表現をとるわけです。 このように下位の(小さい=little)方(end)が先頭に来る CPU を「little endian」、 逆に Sun SPARC など素直に上位バイト、下位バイトの順に並ぶ CPU を 「ビッグエンディアン(big endian)」と呼びます。 ちなみに、この「リトルエンディアン(little endian)」や「ビッグエンディアン(big endian)」 という語はスウィフトの「ガリバー旅行記」に由来し、 卵の尖った方から食べるのが正しいと主張する一派を「リトルエンディアン」、 丸いほうから食べるべしと唱えた一派を「ビッグエンディアン」 と呼んだことから始まります。ハッカー(スーパープログラマ)一流の洒落ですね。

参考URL:
http://www.atmarkit.co.jp/icd/root/00/49717200.html,http://www.inet-lab.org/ted/program/prog035.html
LOVEPOME
質問者

お礼

IBMのAIXで"od"コマンドを使ってみましたが、Linuxとは異なる結果(私が期待していた結果ですね)になりました。 とても勉強になりました。どうもありがとうございます。

その他の回答 (1)

  • astronaut
  • ベストアンサー率58% (303/516)
回答No.1

検索キーワードは, ・バイトオーダー ・(ビッグ/リトル)エンディアン などです. 移植性のあるプログラムを開発しようとするときは必須の知識ですね.

関連するQ&A

  • windowsXP --> FedoraCore1 漢字変換について

    SJISのtextファイルを、メールに添え付けて、 Linuxに送って、nkfでEUCに変換しようとしたところ うまくいきません。 nkf -e sjis.txt これでは、うまくいきませんでした。 nkf -unix sjis.txt これでは、標準出力ですが、うまく変換できています。 それで、 nkf -unix sjis.txt >/tmp/a.txt を、実行したところ、出力ファイルの中は、 変換できていませんでした。 sjis.txtは、windowsのメモ帳で、 "あいうえお"と、書いただけです。 よろしくお願いいたします。

  • Linux、unix、シェルスクリプトの基礎知識、コマンドについて

    会社でteratermを使ってコマンドベースの仕事をする機会があるため、コマンドやシェルスクリプトについて理解したいと考えています。 そこで疑問がわいてきたため、何点か質問があります。 1)teratermでtelnetで接続してコマンドを打つときはunixのコマンドですか?linuxのコマンドですか? 2)unixとlinuxで簡単なコマンドレベルでの差は無いものと考えて大丈夫でしょうか? 3)勉強するならunix、linuxどっちがお勧めですか? (今のところ参考書として、独習linuxか独習unixを買って勉強しようと思っています。他にお勧めの参考書があれば教えてください。) 4)シェルスクリプトを家でも作成してみたいのですが、ubuntuをインストールして端末上で操作し、作成して試すことはできるのでしょうか? (お勧めの参考書があれば教えてください。) 長くなってしまいましたが、よろしくお願いします。

  • [teraterm] waitコマンドで停止しない。

    お世話になっております。 現在teratermのマクロを作成しているのですが、waitコマンドがうまく動いてくれない箇所があります。 どなたか解決策をご教授いただけないでしょうか。 【質問】 UNIX上にてシェルを実行後、コマンドプロンプトが戻ってきた時点で"echo $?"にてシェルのリターンコードを確認するマクロを作成しています。しかし、シェルの終了に時間がかかるためか、コマンドプロンプトが戻ってくるのを確認せずに"echo $?"を実行してしまっています。 【プログラム(該当箇所)】 timeout=20 sendln 'シェルの実行' wait ']$ ' sendln 'echo $?' wait '0' 【コンソール上】 ]$ シェルの実行 echo $? シェルの実行結果 ]$ 以上、よろしくお願いいたします。

  • PHPファイル文字化けについて

    linux CentOS3(RedHat Enterprise3)を利用しています。 linuxは文字コードがEUCと認識しております。 そこでwindows上にてPHPファイルを作成、文字コードEUCにて保存し、 ffftpにてlinuxサーバにアップロードし、webページを参照してみました。 PHPファイルは以下の通りです。 <?php echo "こんにちは"; ?> 結果、InternetExplorerを利用し閲覧したところ文字化けにて表示されます。 文字コードは「UTF-8」が選択されています。 もちろん、文字コードを「EUC」に変更すると、 出力されてほしい文字列が表示されます。 これをInternetExplorerにて表示したとき、 文字化けしないような設定に変更したいと考えます。 どのような手順を踏めばよろしいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • ファイルのコード変換(EUCからSJIS)するコマンドは?

    OS:Windows Server 2003 コマンドラインベースで、EUCコードのファイルをSJISコードに変換するコマンドを教えていただけないでしょうか?

  • UNIX上で文字コードの一括変換はできますか?

    UNIX上で、文字コードを変換したいのですが、今まではSJISからEUCといった変換にnkfを使用してきましたが、nkfだと1ファイル毎でしか文字コードを変換できませんでした。1行のコマンドでそのディレクトリ内の全てのファイルの文字コードを変換してくれるコマンドはありますでしょうか? UNIX上で実現できれば、Perlでもなんでも結構です。よろしくお願いします。

  • UTF-8 環境をSJIS化した後の改行コードの取扱がよくわかりません

    RedHat Linux ES4 にて、デフォルトUTF-8の文字コードを以下のサイトの手順に従いSJIS化して使用しています。 (サイトの例ではEUC⇒SJISなのですが) http://www.k5.dion.ne.jp/~whatsup/linux/euc_to_sjis.html その後、Windows上でシェルスクリプトなどを作成し、ASCIIでアップロードして実行すると『:bad interpreter: そのようなファイルやディレクトリはありません』となります。 Webで調べたところ改行コードが正しくないとの事なのですが、どうにか回避することは出来ないでしょうか?

  • Cシェルにあるコマンドの代わり

    UNIX端末でCシェルのプログラムがあるのですが、今後UNIX端末を 廃棄して、WindowsのPCだけにするようなので、プログラムが使えなくなるのが困ります。 いくつかはVB2005でdosコマンドを使って作り直したのですが、今作ろうとしている物の中の コマンドで調べても解らないのがありました。 echo(echo $a > sssやecho 'abc def' >> sss) cat(set x = 'cat rrr') paste(paste fff ggg > hhh) などのコマンドと、あとawkがありました。 よろしくお願いします。

  • コード変換(漢字)のサンプルプログラム

    始めまして! 困っています、御力添えをお願いします。 UNIX(SouOS5.8)でのコード変換(SJIS→EUC、EUC→SJIS)のコーディング(サンプルソース:C言語)をどなたか教えて頂けないでしょうか? お願いします。

  • mysqlコマンドでcharsetを指定したい

    my.cnfは下記の設定で、 LinuxのSSHでmysqlコマンドを使う時だけ、ujis(EUC) で表示したいのですがどうすれば良いでしょうか? ■/etc/my.cnf [client] default-character-set=sjis [mysql] default-character-set=sjis [mysqldump] default-character-set=sjis mysqlコマンドではオプションが指定できないようで・・