Web開発者として、私はバイナリデータについてほとんど理解していません。
私は、「こんにちは。」の文章を取るバイナリに変換し、SQLデータベース内のバイナリとしてそれを保存する場合、思わ文字よりも多くのスペースを取るだろう、1と0のように。文字を使用することは、1つの記号が複数を表す圧縮を使用するようなものです。
しかし、それは本当にそれがどのように機能するのですか?
プレーンテキストデータの保存は、同等のメッセージをバイナリで保存するよりもスペースを取りませんか?
Web開発者として、私はバイナリデータについてほとんど理解していません。
私は、「こんにちは。」の文章を取るバイナリに変換し、SQLデータベース内のバイナリとしてそれを保存する場合、思わ文字よりも多くのスペースを取るだろう、1と0のように。文字を使用することは、1つの記号が複数を表す圧縮を使用するようなものです。
しかし、それは本当にそれがどのように機能するのですか?
プレーンテキストデータの保存は、同等のメッセージをバイナリで保存するよりもスペースを取りませんか?
回答:
H
ハードドライブに書き込みを行う場合、書き込みヘッドは2本の垂直線と1本の水平線をプラッタに刻むことなく、ビット01001000
1をプラッタに磁気的にエンコードします。
そこから、プレーンテキストデータの保存が、バイナリデータの保存とまったく同じ容量を占めることは明らかです。
平文は可逆的に他のバイナリ形式に変換できます。一般的な変換の1つは圧縮で、通常はよりコンパクトな表現になります。つまり、同じ情報を表現するために使用されるビットが少なくなります。
プレーンテキストを使用して表現する内容によっては、異なるバイナリ形式を使用して同じ情報を表現できる場合があります。これにより、より多くのスペースが使用される場合がありますが、使用量が少なくなる場合があります。
たとえば、数字5
と数字は数字を1234567
使用して平文で表すことができ、ディスク3でこれらのビットシーケンスが発生します。
00110101 00000000
00110001 00110010 00110011 00110100 00110101 00110110 00110111 00000000
または、32ビットの2の補数を使用することもできます。
00000000 00000000 00000000 00000101
00000000 00010010 11010110 10000111
これはのよりコンパクトではない表現です5
が、のよりコンパクトな表現です1234567
。
また、文字通り無限の数の他の表現があり、さまざまなレベルのコンパクトさと柔軟性がありますが、実際には実際に使用される表現はそれよりはるかに少ないです。
1 UTF-8を想定しています。文字のビットの正確なシーケンスは、使用している特定のエンコーディングによって異なります。
2または、実際には、さまざまなエンコーディングが指定されたいくつかの形式。
3端にある8つのゼロが何なのか疑問に思うなら、データの長さを知る何らかの方法が必要です。オプションは基本的に、マーカー(ヌルバイトを介してこれを使用)、長さの保存専用のスペース(パスカルは文字列の長さを保存するためにバイトを使用)、または固定サイズ(後続の2の補数で使用)例)。
これはとても楽しいことだと思います。あなたがそれについて話す方法で、バイナリは1と0ではありません。
数量があると想像してください。数量はさまざまな方法でわかります。
Nine
英語でNeuf
フランス語で9
アラビア数字IX
ローマ数字で1001
アラビア数字付きのバイナリon off off on
オン/オフのバイナリでhigh low low high
電圧またはレバーまたは水位または電荷で表されるバイナリ...または英語の単語「高」および「低」それらはすべて同じものを表しています。ここでのポイントは、バイナリが1と0ではないということです。これは、値を表す唯一の方法です。
Hをバイナリに変換することについて話すとき、おそらく10101010が画面に表示されることを想像しますが、それは「バイナリ」ではなく、各バイナリビットごとに1桁です。
はい、H
人々が通常話しているように「バイナリ」に変換し、それをアラビア数字で表現して保存すると、変換H
にaitch
多くのスペースが必要になるのと同じように、より多くのスペースが必要になります。
しかし、「Hをバイナリに変換してhigh low high low high low high low
、35文字かかるように表現した場合、それはさらに多く!!」というロジックによって、バイナリは数量を表す1つの方法であることがわかります10101010
。 ..では、一方は他方よりも大きいのでしょうか?
この他の側面は、どのように不思議にあるH
コンピュータによって格納され、それが見てH
同じ量-ちょうど量を表す方法自体で72
、01001000
またはseventy two
またはASCII文字コードH
。これは、プレーンテキストはバイナリであるという8bittreeの答えですが、これは私がそれが何を意味するかを示すことを試みています。
それで、あなたはコンピューターで少しパターンを取得し、01001000
それはどういう意味ですか?何でも-数字として、zipファイルの一部として、キャラクターとして、それを作成した人の意図が何であるかに依存します。プレーンテキストであることがわかっている場合は、文字エンコードから取得されますH
-> 01001000
文字エンコードテーブルで別の方法で検索します-ASCII、UTF-8、shift-jisなど、適切なフォントを見つけますキャラクターと出てくるものはH
何でも。または、作成者が使用したエンコードルックアップとは異なるエンコードルックアップを使用すると、間違った文字が出力されます。これは@Eric Lippertのリンクです。
しかし、私がこれを書いているとき、そしてあなたが考えているように、H
1バイトで01001000
8バイトです。そして、はい、それは(の表現)バイナリです。しかし、コンピューターが使用しているよりも高い抽象化レベルです-ASCII文字で表示されるバイナリ。各文字は、それぞれがH
単独の大きさのバイナリビットパターンで舞台裏で表されます。
プレーンテキストデータの保存は、同等のメッセージをバイナリで保存するよりもスペースを取りませんか?
いいえ、決して。
コンピューターには、同等のバイナリ表現でプレーンテキストデータが既に格納されています。何かをプレーンテキストとバイナリのどちらで保存するかは、コンピュータがその同一のバイナリストリームをどのように解釈するかを示しています。
文字を使用することは、1つの記号が複数を表す圧縮を使用するようなものです。
それはちょっと本当です。1文字は複数のビットを表します。問題は、サイズが異なることです。1または0を格納するのに1ビットしか必要ありませんが、プレーンテキスト文字を格納するには8ビット(またはそれ以上)です。キャラクターを使用しても何も得られません。
どちらかといえば、他の方法で圧縮できます。結局のところ、8ビットは256の異なる可能な値ですが、プレーンテキストは通常、文字、数字、およびいくつかの句読文字に制限されています。必要なビット数は必要ありません。