バイナリの基礎知識

バイナリについて勉強したので忘れないようにメモしておく。
 

バイナリとは

パソコンで扱うファイルを分類すると,大きく以下の2つに分かれる。

  • テキストファイル
  • バイナリファイル

 

テキストファイルとは

文字を表すデータである。文字コード表に載っているデータだけが書かれているファイルを指す。
 

バイナリファイルとは

テキストファイル以外の全てのファイルを指す。
 

文字コードとは

コンピュータは0と1の組み合わせでしか情報を表現できないので,「文字」の情報を扱うためには,「0と1の組み合わせがどんな文字を表すか」というルールを決めておく必要がある。そのルールを文字コードと呼ぶ。
 
文字コードとは,どんなものかを知る為に,以下に文字コード表の一部を示す。
 
文字コード表
※こちらのページに載っている文字コード表の一部を引用させていただいた。
 
例として,アルファベットの「a」の文字コードを調べてみる。表を見ると,「a」は「6」の行の「1」の列にあることが分かる。よって,この文字コード表では,16進数の「61」というデータが「a」を表している。同様に「a」を2進数で表現する場合は「01100001」となる。
 
※通常,16進数は10進数と間違えないように頭に「0x」と付ける。よって,16進数は「0x61」のように書き表すことができる。
 
文字コードには様々な種類があり,日本語の文字が使える文字コードだけでも,JIS,Shift-JIS,EUC,UTF-16,UTF-8などがある。このような文字コードを作る元になったものとして,ASCII(アスキー)がある。
 

ASCIIと日本語文字コードの関係

ASCIIとは,1963年にアメリカ規格協会(ANSI)が定めた,情報交換用の文字コードの体系である。1967年に国際標準化機構(ISO)で定められた情報交換用符号の国際規格「ISO 646」とほぼ同じものである。7ビットで表現され,128種類のローマ字,数字,記号,制御コードで構成されている。実際にはコンピュータは1文字を8ビット(1バイト)で表現するため,256種類の文字を扱うことができるが,ASCIIが定めていない128文字分の拡張領域には,ンピュータメーカーや国によって異なる文字が収録されている。日本では,拡張領域にカナ文字を収録したコード体系が「JIS X 0201」として規格化されている。
 
この「JIS X 0201」が現存のJIS(日本工業規格)における最も古い文字コードである。JISとは,工業標準化法に基づき,日本工業標準調査会の答申を受けて,主務大臣が制定する工業標準であり,日本の国家標準の一つである。
「JIS X 0201」は,現在では主にShift_JISおよびEUC-JPの一部として用いられており,単独で用いられることはほとんどない。これらの文字コードは JIS X 0208の文字も含んでおり,JIS X 0208にはJIS X 0201にあるほぼすべての文字があるため文字が重複することとなる。この区別のため,JIS X 0201の文字をJIS X 0208の文字の半分の幅で表示することが多い。このため,これらの文字を俗に半角文字,特に片仮名を半角カナと呼ぶ事が多い。
 
文字コードの概要が理解できたところで,以下より,実際にバイナリを読んでみる。
 

実際にバイナリを読んでみる

今回は,Vimのxxdコマンドを使用してテキストをバイナリに変換する。
 

テキストからバイナリに変換する

Vimでテキストを開いた状態で,以下のコマンドを実行することで,バイナリへの変換を行うことができる。
 
:%!xxd
 

バイナリからテキストに変換する

Vimでバイナリを開いた状態で,以下のコマンドを実行することで,テキストへの変換を行うことができる。
 
:%!xxd -r
 

実際にバイナリを読んでみる

以下の内容が記述されたファイルをVimで開き,:%!xxdコマンドを実行する。
 

aaa
bbb
ccc

 
すると,以下のようにテキストがバイナリに変換される。
 
binary
 
上記画像の「0000000:」と「aaa..bbb..ccc..」は視認補助の為の情報なので,バイナリは「6161 610d 0a62 6262 0d0a 6363 630d 0a」の部分である。テキストの「a」はバイナリでは「61」,テキストの「b」はバイナリでは「62」,テキストの「c」はバイナリでは「63」という対応付けが行われている。
「0d」と「0a」は改行コードである。今回はWindowsマシンで作業をしたので,改行コードには「CR+LF」が用いられている。
 

改行コードとは

テキストファイル中で改行を意味する文字コードのことである。正確には,改行してカーソルを行頭に復帰する動作を指示するコードのことを指す。以下の表は改行コードとASCIIコードの対応表である。
 

記号 呼び名,別名 ASCIIコード マッチング
LF ラインフィード(Line Feed),ニューライン(New Line) 0A \n
CR キャリッジリターン(Carriage Return),リターン(Return) 0D \r

 
文字コード体系の種類には依存しないが,もともと「CR」(Carriage Return : 行頭復帰)と「LF」(Line Feed : 改行)の2つのコードが存在していたことから,WindowsではCR+LF,Mac OSではCR,UNIXではLFが使われている。
※Mac OS X以降では,Macの改行コードは「LF」になっている。
 

頻出する制御コード

バイナリファイルの中に頻繁に登場する制御コードとして以下の表に示すものが挙げられる。
 

頻出する制御コードの表
16進数 文字 説明
0x00 NUL 何も書かれていないことを表す空文字。C言語などでは文字列の終端に付けて,これ以降に文字列が続かないことを表す。
0x08 BS バックスペース。
0x09 HT 水平タブ。Tabキーで入力される。tab とは table の意味で,もともと表をつくるための文字である。
0x0A LF ラインフィード。元の意味は「次の行に進める」である。改行コードの一つ。
0x0D CR キャリッジリターン。元の意味は「印字ヘッドを行の先頭に戻す」である。改行コードの一つ。

 
上記は最低限,暗記しておきたい。
 

まとめ

  • ファイルには大きく分けて「テキスト」と「バイナリ」の2つがある
  • 「バイナリ」に文字コードのルールを適用したものが「テキスト」である
  • バイナリを読むには文字コード表を用いる
  • Vimではxxdコマンドによって,「テキスト」と「バイナリ」の相互変換ができる
  • 改行コードは,Windowsが「CR+LF」,Macが「CR」,Unixが「LF」である

 
 
以上
 
 
参考
コンピュータの仕組み ~テキストファイルとバイナリファイル~ | リスティング広告の運用代行ならカルテットコミュニケーションズ
ASCIIとJISローマ字―文字コード入門―
ASCIIとは (アスキーとは) [単語記事] – ニコニコ大百科
エスケープシーケンスとは – IT用語辞典 Weblio辞書
ASCIIとは 〔 アスキーコード 〕 【 US-ASCII 】 – 意味/解説/説明/定義 : IT用語辞典
改行コード – Wikipedia
改行コードの話
vimでバイナリを表示し、値を変更したい – rderaログ

Article written by

コメントを残す