
elttacさん、Tacosanさん、terrar5さん、先日はありがとうございました。どうしても、疑問でならない部分がありまして、よろしければ、もう少しお付き合いよろしくお願い致します。
/---------------------------------------------------------------------------
エディアンとは、2 バイト以上の数値データを記録・転送するときの 「各バイトの並べ方」です。
たとえば,2 バイトの数値 0x0102(10 進数で 258)を考えましょう。ビッグエンディアンでは,この格納順は正順,つまり,
01 02
になります。
-------------------------------------------------------------------------------/
1バイト目の0x02(2進数で 0000,0002)ですが、これも並び順によっては、0x20になっちゃったりしないのでしょうか?
1バイトでもビット単位で並び順が違えばさかさまになるような気がしまして。(1台のPC上では、バイト単位で処理しているので、大丈夫!? ネットワークでは、1bit単位でデータが転送されていますので???)
ビット単位でもビッグエンディアンやリトルエンディアンみたいなのがあるのでしょうか?
No.2ベストアンサー
- 回答日時:
>バイト目の0x02(2進数で 0000,0002)ですが、これも並び順によっては、0x20になっちゃったりしないのでしょうか?
(2進数で 0000,0010)のタイプミスですよね。
現在ではソフトウェアで順序を意識するのはバイトまでで、シリアル変換は通常は専用LSIで行いますので、規格ごとに決まった順序で送受信されます。RS232Cは下位ビットが先だったように記憶していますが、検索してもはっきり書いたページが見つかりませんでした。(昔はソフトでビットシフトしながら、1ビットずつ処理していたこともありますが)
>ビット単位でもビッグエンディアンやリトルエンディアンみたいなのがあるのでしょうか?
ありますが、規格ごとに決まっているのでプログラマが気にする必要はありません。
リトルエンディアンって、下位バイトをメモリ上の下位アドレスに格納するし、RS232Cの場合、下位バイトの下位ビットから上位バイトの上位ビットまでを順におくるのでわかりやすいのですが、ネットワーク上でのバイト順はビットエンディアンが採用されています。
数値の通信に関しては、ntohs,ntohl,htons,htonl等の関数でその環境に応じたエンディアンとネットワークエンディアンとの相互変換を必ず使うことにしておけば、どちらのエンディアンでも動くプログラムが作れます。
No.4
- 回答日時:
画像処理では重要な問題ですよ。
モノクロ2値画像を考えると、ビット並びがそのまま白黒のドットに対応します。
そこでMSB(最高位ビット)、LSB(最低位ビット)の位置関係が問題になります。
いわゆる68系と80系ではバイト単位、ビット単位どちらもエンディアンは逆ですから何も考えずに処理すると、画像の左右が反転します。
フォントまわりの制御でも同じ問題が出ますね。
No.3
- 回答日時:
いちおうビット単位でもエンディアンはあって, たとえば
「ビット0 はどこ?」と言われたときに
最上位ビットになるもの (ビッグエンディアンはたいていこうなる) と
最下位ビットになるもの (リトルエンディアンはたいていこうなる) が
あります.
C で普通にプログラムを書いている限りこのレベルで困ることは
ないのですが, ビットフィールドを使うとはまるかも.
No.1
- 回答日時:
データ通信を行う場合には、上位ビットから送るのか下位ビットから送るのかが問題になります。
しかし通常は専用ICを使うのでICにお任せです。
でも自力でパラレル/シリアル変換をする必要があるときには、相手側とちゃんと合わせないといけません。
※PIC等を使って組み込み用のプログラムを作るときなど。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0xffffとは?
-
8ビットのデータの、先頭ビット...
-
CASL2(減算命令と比較命令の...
-
エクセルVBAのIf,Then 構...
-
整数除算の意味とは?
-
文字参照は10進数と16進数では...
-
2の補数
-
一般のソフトで画像を扱う場合...
-
ビットシフトってどんな時使うの?
-
シーケンサのデータレジスタD...
-
実行ファイルからソースはみれる?
-
レジストってなんですか?
-
Delphiでの関数の戻り値を別の...
-
SRAMとレジスタの違いは何でし...
-
アセンブラ言語がわかりません。
-
void __cdeclなど_
-
マシン語で再起動を書くには?
-
GCCの.cfi_系について
-
アセンブラのLA
-
CPUは何故、16bit→32bit→64bit...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0xffffとは?
-
8ビットのデータの、先頭ビット...
-
C言語で128bitの2進数のビット...
-
ビットシフトってどんな時使うの?
-
「ひまわり」と「なでしこ」の違い
-
[VBS] 素早くローテート演算したい
-
一般のソフトで画像を扱う場合...
-
文字参照は10進数と16進数では...
-
アセンブラプログラムの「数値...
-
x86のJP命令について。
-
命令について
-
VB.net
-
03分22秒36のような時間の単位...
-
verilog 符号付加減算(最上位...
-
e(自然対数の底)を100桁以上出...
-
代入の書き方で質問です。
-
マイクロコンピューター制御の...
-
光コンピュータについて
-
アセンブリの論理演算命令のCPL...
-
符号無し整数xを右にnビット回転
おすすめ情報