プロが教える店舗&オフィスのセキュリティ対策術

なぜ通信には16進数文字列が使われるのでしょうか

シリアル通信や、xbeeなど、通信には16進数文字列が使われていると思います。

しかし、わざわざ変換処理をかけることにより、データ量は減るものの、処理量は増えていると思います。

送るデータをそのまま参考にできれば、
例えば数値で送って数値で参照できれば変換処理が減るのでは?と思うのですが、どう思いますか?

質問者からの補足コメント

  • データ量的にも
    例えば
    8ビットの情報を送るとしたら
    16進数で表して、4ビットずつで区切られて、
    それを1文字、1バイトを使って4ビットの0〜の情報を表しているので、
    受け取り側では16ビットの2文字分のデータを扱うこととなり
    そこから変換処理をしてやっと8ビットの情報が得られます
    最初から8ビットの数値のまま送受信できれば、処理もデータ量も無駄ではないと感じるのですが
    なぜ16進数文字列にしているのでしょうか

      補足日時:2020/01/06 03:43

A 回答 (10件)

>通信には16進数文字列が使われている


そう思うところが 素人のあさはかさ
実際の通信は 信号のON-OFFで送られています 言ってみれば2進ですが...
実際はもっと複雑で 位相拡散とか多重変調も行われます 

16進で表現しているのは人間にわかりやすくするために信号を変換して表示しているだけです。
(よく映画で0と1がだーーーっと並んでいるのがありますが あれも間違い
  実際には ある状態 と ない状態 が送られています)
    • good
    • 1

16進に変換するのは、本来バイナリであるプログラムコードや送受信データを人間がデバッグ等の目的で直接読もうとする時に2進数のままでは表示桁が増えて理解しにくいため便宜上、「画面表示用に16進数の文字に変換して表示しているだけ」で、送受信しているデータそのものは4ビットや8ビットバイナリのままですよ。


だから質問者が補足している内容(8ビットのデータを4ビットずつ区切ってさらに8ビットの文字コードに変換して送受信)は誤り。そんな非効率的な通信・変換処理はしていません。
    • good
    • 1

ちょっとどっちの意味で言っているのか分からないので両方書きますが、



・通信が16進数の文字列で行われていると考えているなら
通信で16進数の文字列が使われることはあまりありません。普通は8ビットの情報を8ビットの数値のまま送受信します。入力や表示に16進数の文字列が使わるのとは別の話です。

・入力や表示のことを言っているなら
8ビットの情報をそのまま表示したり入力したりする方法が無いからです。
    • good
    • 0

そもそも論、「通信」について理解する必要があると思います。



通信の基本は、「送り手」と「受け手」がいて、それぞれが同じ約束事に従って会話するということです。もう一つ重要なことは、送り手と受け手は、必ずしも一組とは限らないということで、コンピュータ同士の通信の場合はほぼ必ず入れ子構造になっています。

具体的には、一つの通信には、末端のプログラム同士が会話するための約束事と、途中で信号をやり取りする機器同士が会話するための約束事が入れ子になっています。携帯電話で会話することを考えるとわかりやすいですが、話者同士の間では、日本語という約束事に従って会話します。その中間には、携帯電話と基地局間では無線通信という約束事、基地局から相手基地局間では(実際には何段か複数種類のものがありますが)光通信という約束事、相手基地局と相手の携帯電話の間ではまた無線通信という約束事、というのが挟まって初めて通信が成り立っています。

他の回答にある「二進数で」とかいう説明は、この中では機器同士の会話に相当するものです。これは携帯電話間では「デジタル信号をやり取りする」という約束事があり、最低限各機器ではデジタル復号(つまり二進数表現)した上で次の機器に伝送しているため、こういった説明がされています。もっと細かく言えば、各機器間では二進数を表現するために電気的な状態の変化によって「0にしよう」「1にしよう」とかいう約束事がそれぞれありますが、このあたりは割愛します。

さて、ご質問にある「通信には16進数文字列が使われている」というのは、恐らく末端のプログラム同士の会話の約束事なのでしょう。たとえば、通信に利用しているプログラムが何らかの理由で印刷可能な文字コードでなければ処理できない、なんて場合に、数値を無理やり表現するためにASCII文字で表現することも考えられます。例えばキーボードとディスプレイを送受信データの入出力に直接利用している機器だったりすると、バイナリデータの送受信が困難なため、ASCII文字のみで通信しましょう、という約束事にすることもあると思います(TeraTermなどのシリアル端末ソフトウェアがわかりやすい例だと思います)。

もちろん、シリアル通信でもバイナリデータを送信することはできます。これは通信の末端にあるプログラム間での約束事でそう決めればいいだけの話です。身近なシリアル通信、たとえばUSBなんかでは、バイナリデータがバンバン流れています。
    • good
    • 1

>通信には16進数文字列が使われる


これは勘違いです。0と1~構成される2進数で行われているのですが、表現するときに長くなり混乱するので16進数で表現しているにすぎません。2進数の11110000をイチ・イチ・イチ・イチ・ゼロ・ゼロ・ゼロ・ゼロと表現すると長くなるので、4ビット単位で区切ってF0(エフ・ゼロ)と表現しているだけなのです。
そして変換処理なんかもしていません。通信する時のデータはそのままです。変換処理するのはプリンタやディスプレイに出力するような時だけです(厳密にはキーボード等からの入力時もありますが)。英数字や日本語では1バイト系文字と2バイト系文字があったり、文字コードもASCII、JIS、EBCDIC等がありますので変換が必要なのです。
    • good
    • 0

16進数を使うのは単に表現方法の問題であって、メモリ内にある情報や送受信される情報はすべて2進です。


例えば、ABという16進数が送信元にあるとする。そのデータは送信元のメモリ内ではABとして存在するのではなく、10101011として存在します。そしてそれを送る時にもABとしてではなく10101011として送られて、受信側ではその情報を10101011としてメモリで受けて処理をする。つまり処理は常に2進として行われています。だから、いったんシステムに入ってしまえば、16進で表現しようが2進で表現しようがデータ量も処理量も同じです。

唯一、2進と16進の間での変換処理が必要になるのは、人間がデータを入力するとき(キーボードから入力された16進数を2進に変換してメモリに保存)とデータを参照するとき(メモリ内の2進数を16進に変換して表示)だけです。その程度のオーバーヘッドは全体の処理を考慮するば無視できるくらい小さい。
    • good
    • 0

昔、8bitマイコンの時代CPUメーカーから出た資料はhexでした、従って


hexで書きましたがCPU内部のレジスタやアドレスからスタックレジスタまで
指定して処理をさせなくてはならず大変な作業です、そのためベーシックや
C言語などが進歩して来たのです、その当時からエンコーダーやデコーダーは
あり、ハードで変換するので処理速度については問題はないでしょう。
今は8bitでは足りません8bitで書いているようでも上位bitはソフト上で処理して
います。(8bitマイコンなら別)
    • good
    • 0

コンピュータで処理するのは2進数で、通信でも2進だけですし、


ただ二進法だと数字の羅列となり人にとって煩雑になることから、コンパクトに16進数であらわしているにすぎません。

パソコンはなぜ16進数を好むのか?
http://www.buturigaku.net/sub03_Spot/ICT/hex.html
    • good
    • 0

>>シリアル通信や、xbeeなど、通信には16進数文字列が使われていると思います。



xbeeは使ったことありませんが、シリアル通信は、民間にインターネットが解放されていないころ、一般の電話回線を使って、パソコン通信を行っていました。
そのころの通信プログラムは、16進数文字列なんて全然使っていませんでしたね。
テキストデータだけなら、確かにデータ量が減るけど、その当時のパソコン処理速度が遅いとか使用する言語がBasicで、あまり複雑なことやるのが苦手だったのが理由です。

また、当時のパソコンは漢字が使えず、ローマ字か、半角カタカナで通信していました。
半角カタカナは、4bitでは表現できず、8bitが必要だったので、16進数文字列は不適切だったのです。
    • good
    • 0

>なぜ通信には16進数文字列が使われるのでしょうか



文字種類が少なく、人も覚えやすく、そこそこ少ない桁数で表現できるし
区切り位置が2進数と4ビット単位で合い、そこそこ都合よいから。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています