「リトルエンディアン」 と 「ビッグエンディアン」 のキーワードで検索するから見つからないらしく、これらの別名として 「ホストバイトオーダー」 と 「ネットワークバイトオーダー」 というキーワードがあり、こちらで検索すると相互変換関数が見つかる。
それでも用意されている関数だけだと16bit(2byte)と32bit(4byte)の値しか扱えないので、自前で実装する余地が残っているのが救いか?
ネットワークバイトオーダー<->ホストバイトオーダー変換関数(BYTEORDER関数)
- #include <arpa/inet.h>
- u_long htonl (u_long hostlong) : 32 ビットホストバイトオーダーをネットワークバイトオーダーに変換します
- u_short htons (u_short hostshort) : 16 ビットホストバイトオーダーをネットワークバイトオーダーに変換します
- u_long ntohl (u_long netlong) : 32 ビットネットワークバイトオーダーをホストバイトオーダーに変換します
- u_short ntohs (u_short netshort) : 16 ビットネットワークバイトオーダーをホストバイトオーダーに変換します
また、隣接するバイトを変換するswab(swap byte)関数が用意されている。
- #include <string.h>
- void swab(const void *from, void *to, size_t n) : from で指された配列から n バイトを to で指された配列に、隣接した偶数/奇数バイトを交換しながらコピーする。この関数は異なるバイトオーダーを持つマシン間でのデータ交換に使用される
0 件のコメント:
コメントを投稿