進行網路開發處理 ISO8583 訊息時,數值型欄位傳輸涉及位元組序轉換。
封包時將主機序轉網路序;拆包時將網路序轉主機序。
// 主機序 -> 網路序 short/int/long IPAddress.HostToNetworkOrder(short/int/long) // 網路序 -> 主機序 short/int/long IPAddress.NetworkToHostOrder(short/int/long)
int x = 1; // 主機序:[1][0][0][0] 低位在前 int y = 65536; // 主機序:[0][0][1][0] int m = IPAddress.HostToNetworkOrder(x); // 網路序:[0][0][0][1] 高位在前 int n = IPAddress.HostToNetworkOrder(y); // 網路序:[0][1][0][0] byte[] btValue = BitConverter.GetBytes(m); // 取得 4 位元組陣列寫入封包 // 接收端拆包 int m = BitConverter.ToInt32(btValue, 0); int x = IPAddress.NetworkToHostOrder(m); // 還原為主機序實際值
| 處理器 | 作業系統 | 位元組序 |
|---|---|---|
| Alpha | 全部 | Little Endian |
| HP-PA | NT | Little Endian |
| HP-PA | UNIX | Big Endian |
| Intel x86 | 全部 | Little Endian |
| Motorola 680x0 | 全部 | Big Endian |
| MIPS | NT | Little Endian |
| MIPS | UNIX | Big Endian |
| PowerPC | NT | Little Endian |
| PowerPC | 非 NT | Big Endian |
| RS/6000 | UNIX | Big Endian |
| SPARC | UNIX | Big Endian |
| IXP1200 ARM | 全部 | Little Endian |
htons:unsigned short 主機序→網路序htonl:unsigned long 主機序→網路序ntohs:unsigned short 網路序→主機序ntohl:unsigned long 網路序→主機序Little Endian 系統會實際轉換;Big Endian 系統定義為空巨集。跨平台開發務必統一位元組序,否則雙方解讀不一致產生 Bug。