エンディアン

endianness.png
メモリ上に配置する方式の種類のこと。
1234ABCD
ビッグエンディアン 人間にとってわかりやすい 12 34 AB CD
リトル・エンディアン コンピュータにとってわかりやすい CD AB 34 12

1234ABCD(16進数)という4バイトのデータを、
データの上位バイトからメモリに「12 34 AB CD」と並べる方式をビッグエンディアン
データの下位バイトから「CD AB 34 12」と並べる方式をリトルエンディアンという

VisualStudioのバイナリエディタはどうなっているのか

printf("%x")して読むとこうなる

[0]:fffffffd
[1]:71
[2]:17
[3]:31
[4]:ffffff87
[5]:7
[6]:4
[7]:12

たまにfが詰まっているが、まったく同じ数値が出力される。8個で1ブロックになっている。

バイトオーダーの変換

ネットワークバイトオーダーへ その逆
long(mac) htonll(long) ntohll()
u_long(win?),unsigned int(mac) htonl (u_long hostlong); ntohl (u_long netlong);
u_short htons (u_short hostshort); ntohs (u_short netshort);

host to network という意味である。

#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
void main(){
    unsigned short val=8704;
    printf("before:%x\n",val);
    printf("after:%x\n",htons(val));
}

サポートサイト Wikidot.com