ビット・バイトの話し
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