自分で自分のことをあだ名で呼ぶタイプ

2006/01/18

むかしのひび

姉妹都市とかの協定を結ぶときもロザリオ使ってたらいいなあ。…ondです。

♪ビットフィールドをもつ構造体のバイトスワップ
データを格納する際のバイトオーダーには、最上位バイトから順に並べるビッグエンディアン形式と、最下位バイトから順に並べるリトルエンディアン形式があり、プラットフォームにより異なる。

例:4バイト整数0x12345678のバイト順序
ビッグエンディアン …… 0x12 0x34 0x56 0x78
リトルエンディアン …… 0x78 0x56 0x34 0x12

このため、バイト並びが異なる通信相手とのデータのやりとりにおいては、オーダー変換が必要になる。Windowsソケットのntohl、htonl関数などがよく使われる。
しかし、C言語の構造体でビットフィールドを使用している場合は、データの格納順が以下のようにさらに複雑であり、オーダー変換は一筋縄ではいかなくなる。

ビッグエンディアン:
最上位バイトの最上位ビット側から順にビット領域を割り当てる。基本型全体のバイト並びもビッグエンディアン。
リトルエンディアン:
最下位バイトの最下位ビット側から順にビット領域を割り当てる。基本型全体のバイト並びもリトルエンディアン。

例:次の構造体のデータ領域
struct bits
{
unsigned short a:1;
unsigned short b:2;
unsigned short c:8;
unsigned short d:5;
};

ビッグ …… a1b2b1c8c7c6c5c4 c3c2c1d5d4d3d2d1
リトル …… c5c4c3c2c1b2b1a1 d5d4d3d2d1c8c7c6

ソーシャル/購読

このブログを検索

コメント

ブログ アーカイブ