- C言語なら俺に聞け 136 [無断転載禁止]©2ch.net
884 :片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)[sage]:2016/09/30(金) 19:48:30.05 ID:RzBZUGvmK - >>881
コンピューターから見るとバイナリーファイルの方が合理的。サイズ、速度などの点で。 バイナリーファイルを扱えないOSは汎用に使えない。すでにバイナリーファイルの読み書きはコンピューティングの基礎だから。 作りたいならテキストファイルしか扱えないOSでも作ればいい。性能も機能性も劣るものができるだろう。
|
- C言語なら俺に聞け 136 [無断転載禁止]©2ch.net
886 :片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)[sage]:2016/09/30(金) 19:52:34.77 ID:RzBZUGvmK - バイナリー入出力がないと機械語を扱えない。
ほとんどの機械語はバイナリーデータだから。
|
- C言語なら俺に聞け 136 [無断転載禁止]©2ch.net
889 :片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)[sage]:2016/09/30(金) 19:54:52.12 ID:RzBZUGvmK - >>885
昔はテキスト形式の画像データも使われていた。でもバイナリの方がサイズが小さくなってダウンロードが早いだろ。
|
- C言語なら俺に聞け 136 [無断転載禁止]©2ch.net
890 :片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)[sage]:2016/09/30(金) 19:57:29.70 ID:RzBZUGvmK - >>887
CPUもメモリーのアドレス空間もバイナリーデータの世界だ。
|
- C言語なら俺に聞け 136 [無断転載禁止]©2ch.net
891 :片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)[sage]:2016/09/30(金) 20:02:48.38 ID:RzBZUGvmK - >>887
広義ではテキストデータもバイナリデータに含まれる。バイナリデータの一部をテキストデータと呼んでいるだけだ。
|
- C言語なら俺に聞け 136 [無断転載禁止]©2ch.net
895 :片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)[sage]:2016/09/30(金) 20:14:47.86 ID:RzBZUGvmK - テキストファイルをさまざまなOSで交換するとき、色々な問題が発生した。
第一は改行コードの違いだ。MS-DOSやWindowsでは改行は"\r\n"で出力する。古いタイプのMacでは"\r"で、UNIX/Linuxでは"\n"だった。 この違いを吸収するためにMS-DOSやWindowsのC言語ではテキストモードという特別なモードがある。 テキストモードでは"\r\n"を"\n"と見なす。改行コードが1文字の制御文字になるのは扱いやすい。
|
- C言語なら俺に聞け 136 [無断転載禁止]©2ch.net
896 :片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)[sage]:2016/09/30(金) 20:22:27.80 ID:RzBZUGvmK - 第二に文字の符号化(エンコーディング)の問題だ。
日本語にはシフトJIS,EUC-JP,JISなど、さまざまな文字セットが存在する。 日本語MS-DOSではシフトJISが使われていて、古いタイプのUNIX/LinuxではEUC-JPが使われていた。また、日本語のメール送信ではJISを使っていた。 現在ではテキストデータはASCIIとUnicode(UTF-8を含む)が標準になっている。
|
- C言語なら俺に聞け 136 [無断転載禁止]©2ch.net
897 :片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)[sage]:2016/09/30(金) 20:33:49.22 ID:RzBZUGvmK - Windows内部のテキストデータには主にUTF-16が使われている。言い換えれば、
UTF-16ではないテキストデータをWindows内部で扱うためにはUTF-16への変換が必要かも知れない。
|
- C言語なら俺に聞け 136 [無断転載禁止]©2ch.net
899 :片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)[sage]:2016/09/30(金) 20:47:15.92 ID:RzBZUGvmK - 具体的に見ていこう。
#include <stdio.h> int main(void) { FILE *fp = fopen("a.txt", "w"); fprintf(fp, "\n"); fclose(fp); return 0; } この八行のプログラムはファイル「a.txt」に1個の改行コードを出力する。 Windowsの場合、出力の際に1個の改行コードは"\r\n" (CR LF)に変換されるので、a.txtをバイナリーエディターで開くと、 ファイルサイズは2バイトになるだろう。
|
- C言語なら俺に聞け 136 [無断転載禁止]©2ch.net
900 :片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)[sage]:2016/09/30(金) 20:53:16.11 ID:RzBZUGvmK - バイナリーファイルをメモ帳で読み込んでも読みづらいし、正しく書き込めないかも知れない。
バイナリーファイルを扱うプログラムを作るなら、バイナリーエディターは必需品。必ずインストールしておこう。
|
- C言語なら俺に聞け 136 [無断転載禁止]©2ch.net
902 :片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)[sage]:2016/09/30(金) 21:06:42.05 ID:RzBZUGvmK - バイナリーエディターは、テキストファイルも開ける。
テキストファイルはバイナリーファイルのサブセットだから。 バイナリーのイメージはちょうどバイナリーエディターで表示されるように考えればよい。 バイナリーデータはバイトの並びであり、バイナリーの1バイトは2桁の16進数で表示するのが合理的である。
|
- C言語なら俺に聞け 136 [無断転載禁止]©2ch.net
903 :片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)[sage]:2016/09/30(金) 21:20:07.22 ID:RzBZUGvmK - WindowsのバイナリーエディターはBZかStirlingをオススメする。
|
- C言語なら俺に聞け 136 [無断転載禁止]©2ch.net
909 :片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)[sage]:2016/09/30(金) 22:40:08.06 ID:RzBZUGvmK - MSテキストモードで……
"\r\n"の入力 ⇒ "\n"になる。 "\n"の出力 ⇒ "\r\n"になる。
|
- C言語なら俺に聞け 136 [無断転載禁止]©2ch.net
911 :片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-/8Mt)[sage]:2016/09/30(金) 23:28:45.46 ID:RzBZUGvmK - MSテキストモードでは、入力時の^Zはファイル終端として解釈してもいいことになっている。
ファイルの終わりでCtrl+Zを押してたMS-DOSのなごり。現在ではゴミ文字になるのであまり使わない。getcharでEOFが返るときだろう。
|