ビット・バイトの話し


 1. 例として、16進数の 40 をビットで表す。

    16進数は1桁(1文字)が 4ビットである。

    16進数     2進数         ビット数
    4          0100          4ビット
    0          0000          4ビット
    40         0100 0000     8ビット=1バイト

    つまり、16進数の 40 は、
    4ビット+4ビット=8ビット=1バイト!

    つまり、バイナリデータとしての 0x40 は、

               0100 0000
               8ビット=1バイト

 2. なぜテキストでは、40 は 2バイトなのか?
    テキストファイルに 40 と書いた場合、PC は文字を2個保存する。
    テキストとしての 40 の解釈は、

              4                          0
    文字コード 00110100(34)    文字コード 00110000(30)
    8ビット=1バイト           8ビット=1バイト

               ゆえに、合計16ビット=2バイト

 3. 今回の HADES-SA データに当てはめると、

    TXTファイル:文字 560個 → 560バイト
    その文字を16進数として解釈:2文字ずつを 1バイトに変換
    変換後のバイナリ:280バイト
    280バイト÷40バイト=7フレーム

 4. 改行 CR+LF と LF について

    Windowsでは「改行はCR+LF設定」、LINUXでは「改行はLF設定」として扱う、
    CR, LF はそれぞれ 1バイト、半角スペースも 1バイト。
    次の保存実験をして、Windowsプロパティ表示の数値変化の違いをみてみた。

    CR:Carriage Return (復帰)   16進数 0D
    LF:Line Feed (改行)         16進数 0A

    改行形式                     実際に保存されるバイト
    Windows形式    CR+LF         0D 0A
    Linux形式      LF            0A

    (16進数40 について)

    理論的には、BINでは 1バイト、TXTでは 2バイト。
    このまま保存すると、"40" はTXTで 2バイト(Windowsプロパティ表示)。
    エンターキーを押して "40(エンター)"としてから改めて保存すると、Windowsで
    改行CR+LF設定だと 2+2=4バイト表示、改行LF設定だと 2+1=3バイト表示となる。

    (16進数:40 CA について)

    理論的には、BIN では 1+1=2バイト、TXTでは 2+2=4バイト。
    このまま保存すると、"40 CA" はTXTで 2+1+2=5バイト(Windowsプロパティ表示)。
    エンターキーを押して "40 CA(エンター)"としてから改めて保存すると、Windowsで
    改行CR+LF設定だと 2+1+2+2=7バイト表示、改行LF設定だと 2+1+2+1=6バイト表示となる。

 5. 今回の HADES-SA の Ruby作業では、

    TXTの CR+LF と LF の違いは、今回のRuby処理では問題なし。
    BINは バイト列を変えずに読み込む。
    Windows のプロパティに表示されるファイルサイズが違っても、
    HEXデータ の中身が同じなら処理結果も同じ。



Back to Top
Back to Home Page