たのしい工学

プログラミングを学んで、モノをつくりたいひと、効率的に仕事をしたい人のための硬派なブログになりました

【コンピュータサイエンスの独学】バイナリファイルとWindowsとMacの改行

   

バイナリファイルについて

バイナリファイルの場合、その仕様から多くの異なる目的のデータがバイトごとに並んでいることが多いでしょう。このデータをシーケンシャルにアクセスして、目的のデータだけをカットするのは大変手間がかかります。そこで、バイナリファイルの場合は任意の場所からアクセスできると非常に便利です。このような、特定の場所へのファイルアクセスをランダムアクセスと呼びます

Image from Gyazo

このように、データの形式等が区別なく16進数を並べたものがバイナリファイルです。こういう場合には、シーケンシャルアクセスするよりも、特定の場所へ一足飛びにアクセスできたほうが効率的です。

改行

Windows環境では、改行は2つの文字で表現されます。1つは、数値上「0D」で表されるキャリッジリターン(復帰)、もう1つは、数値上「0A」で表されるラインフィード(改行)です。前者を CR、後者を LF と略し、あわせて CR+LF のように表記することもあります。

環境によっては、CR と LF のいずれか一方だけで、改行を表すこともあります。例えば、macOS では、LF だけが使われるので、先ほどのプログラムを macOS 環境の clang でコンパイルして実行してみると、標準出力に現れる結果は同じに見えますが、バイナリエディタで見ると「0A」だけしかないことが分かります。

これらの違いはキーボードを眺めてみると、よくわかります。
もしも、WindowsとMacの両方をもっていたら、キーボードを見比べてみてください。
Windowsは基本的にはEnterキーでMacはReturnキー(うえのほうにReturnと書いてある)とおもいます。

Macintosh
いくつかのキーボードレイアウトとオペレーティングシステムでは、エンターキーとリターンキーは全く別の2つのキーである。Macintoshでは、メインキーにリターンキーがあり、テンキーにエンターキーがある。
例えばAdobe Photoshopのテキストツールを使用する際にはリターンキーでは改行するが、エンターキーでは編集モードを終了する。Macintosh Programmer's Workshopではこの配置を利用して「ワークシート」と呼ばれる編集に便利なコマンドライン環境が作られ>ている。リターンキーは厳密に改行のみ、エンターキーはシェルコマンドなどの実行に使用される。技術的には、マッキントッシュキーボードにおけるリターンキーは改行コードCRに対応し、エンターキーはLFに対応している。

Wikipediaより参考

エンターキー - Wikipedia
改行コード - Wikipedia

以下、感覚で改行とキーの関係をとらえてみましょう。

つまり、MacがRetrunキーであるのは、Returnキーを押すことでCR、つまり復帰、行頭へ戻るを付加するイメージ。実際にはLFしか送信されないわけですが。

一方、Windowsが RetrunキーではなくEnterキーであるのは、Windowsの改行方式がCR+LFであるため、行頭戻り+行送りのコマンドがセットがされているので、あとはキーとしては実行、Enterすればよいというイメージです。

そのため、メールやチャットなどで、Shift+Retrunを押すと改行ではなく送信が実行されることがあるかと思いますが、あれはReturnではなく、Shiftが押されたことでEnterに切り替わったために改行ではなく送信が実行されるものだと解釈できます。

こんな感じでEnterとReturnの関係から、改行の意味をつかんでしまいましょう。

ではでは!

 - コンピュータサイエンス