質問: バイナリとはなにかがわからなくなったので質問です。 質問の日本語自体が誤りを含むこともあるかと思うので、ご指摘ください。 httpのprotocolに従ってデータをやり取りする際にデータが大きくなりすぎたから binaryでやりとりするみたいなやりとりをたまに見かけるのですが、 結局は文字なので"こ"という文字をデータとして渡すのと同様のbyteコードでいう `e38193`は 文字数が少ない"こ"のほうがデータ量が少ないような直感が働いてしまいます。 実際にcurlとうでbinaryデータをfileとして渡すときにも文字列で渡したほうが圧倒的に`文字数`という観点では少ないのが この直感にも影響します。 おそらくいろいろな解釈にあやまりがあるのでご指摘ください。もしくはわかりやすいページなどがあれば教えてください。 protocol buffersというprotocolはbinaryで定義された型を基準にやり取りするという面でhttpより優れているみたいですが そのへんも教えていただけると幸いです。
回答: > > "こ"という文字をデータとして渡すのと同様のbyteコードでいう e38193は > > 文字数が少ない"こ"のほうがデータ量が少ないような直感が働いてしまいます。 > > > 「バイナリデータ」と「バイナリデータを人間が読める形で表現したもの」を区別できていないようです。 「e38193」←ここに書かれている6文字は、6つの文字を使って3バイトのバイナリデータを表現したものです。バイナリデータそのものではありません。 同じものは他に例えば1バイトづつ10進数で書いた「227,129,147」や、全部2進数で書いた「111000111000000110010011」とも表現できます。 すべて同じものを意味しますが、書くときに書きやすいのでよく「e38193」を使います。 実際のコンピュータ内に存在するデータ表現は2進数の「111000111000000110010011」に近い形になっていることが多いでしょう。 「バイナリデータを人間が読める形で表現したもの」は、人間がコンピュータにバイナリデータを渡す際によく用いられます。 文字数の多い「バイナリデータを人間が読める形で表現したもの」をコンピュータに渡すと、コンピュータがそれをバイナリデータに変換し、それを送信なりなんなりに利用します。 一方、 > > 結局は文字なので > > > いいえ。コンピュータの中では「結局はデータ」です。 コンピュータを使って「こ」という文字を扱おうとすれば、何らかのバイナリデータに変換して扱うしかありません。 この変換の規則を表したのが文字コードであり、(今主流のUTF-8では)「こ」は「e38193」(という表現が表すバイナリデータ)として扱われます。