重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

elttacさん、Tacosanさん、terrar5さん、先日はありがとうございました。どうしても、疑問でならない部分がありまして、よろしければ、もう少しお付き合いよろしくお願い致します。
/---------------------------------------------------------------------------
エディアンとは、2 バイト以上の数値データを記録・転送するときの 「各バイトの並べ方」です。
たとえば,2 バイトの数値 0x0102(10 進数で 258)を考えましょう。ビッグエンディアンでは,この格納順は正順,つまり,
  01 02
になります。
-------------------------------------------------------------------------------/

1バイト目の0x02(2進数で 0000,0002)ですが、これも並び順によっては、0x20になっちゃったりしないのでしょうか?

1バイトでもビット単位で並び順が違えばさかさまになるような気がしまして。(1台のPC上では、バイト単位で処理しているので、大丈夫!? ネットワークでは、1bit単位でデータが転送されていますので???)

ビット単位でもビッグエンディアンやリトルエンディアンみたいなのがあるのでしょうか?

A 回答 (4件)

>バイト目の0x02(2進数で 0000,0002)ですが、これも並び順によっては、0x20になっちゃったりしないのでしょうか?


(2進数で 0000,0010)のタイプミスですよね。

現在ではソフトウェアで順序を意識するのはバイトまでで、シリアル変換は通常は専用LSIで行いますので、規格ごとに決まった順序で送受信されます。RS232Cは下位ビットが先だったように記憶していますが、検索してもはっきり書いたページが見つかりませんでした。(昔はソフトでビットシフトしながら、1ビットずつ処理していたこともありますが)

>ビット単位でもビッグエンディアンやリトルエンディアンみたいなのがあるのでしょうか?
ありますが、規格ごとに決まっているのでプログラマが気にする必要はありません。

リトルエンディアンって、下位バイトをメモリ上の下位アドレスに格納するし、RS232Cの場合、下位バイトの下位ビットから上位バイトの上位ビットまでを順におくるのでわかりやすいのですが、ネットワーク上でのバイト順はビットエンディアンが採用されています。

数値の通信に関しては、ntohs,ntohl,htons,htonl等の関数でその環境に応じたエンディアンとネットワークエンディアンとの相互変換を必ず使うことにしておけば、どちらのエンディアンでも動くプログラムが作れます。
    • good
    • 0

画像処理では重要な問題ですよ。



モノクロ2値画像を考えると、ビット並びがそのまま白黒のドットに対応します。
そこでMSB(最高位ビット)、LSB(最低位ビット)の位置関係が問題になります。

いわゆる68系と80系ではバイト単位、ビット単位どちらもエンディアンは逆ですから何も考えずに処理すると、画像の左右が反転します。

フォントまわりの制御でも同じ問題が出ますね。
    • good
    • 0

いちおうビット単位でもエンディアンはあって, たとえば


「ビット0 はどこ?」と言われたときに
最上位ビットになるもの (ビッグエンディアンはたいていこうなる) と
最下位ビットになるもの (リトルエンディアンはたいていこうなる) が
あります.

C で普通にプログラムを書いている限りこのレベルで困ることは
ないのですが, ビットフィールドを使うとはまるかも.
    • good
    • 0

データ通信を行う場合には、上位ビットから送るのか下位ビットから送るのかが問題になります。


しかし通常は専用ICを使うのでICにお任せです。
でも自力でパラレル/シリアル変換をする必要があるときには、相手側とちゃんと合わせないといけません。
※PIC等を使って組み込み用のプログラムを作るときなど。
    • good
    • 0

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