Dalam mana-mana bahasa pengaturcaraan, konsep endianness (urutan bait) adalah sangat penting. Terutamanya dalam pengaturcaraan rangkaian, kerana komunikasi mestilah merentas platform, adalah perlu untuk memahami konsep susunan bait dan fungsi yang berkaitan. Dalam bahasa PHP, beberapa fungsi juga disediakan untuk membantu kami melakukan penukaran pesanan bait Artikel ini akan melihatnya bersama-sama.
Dalam komputer, memori disimpan dalam bait. Satu bait terdiri daripada 8 bit. Dalam kebanyakan seni bina komputer, bait disimpan dalam cara little-endian, iaitu, bait tertib rendah disimpan dahulu, diikuti oleh bait tertib tinggi. Contohnya, jika anda ingin menyimpan integer 16-bit 0x1234
, ia disimpan dalam memori dengan cara berikut:
34 12
Sudah tentu, terdapat juga beberapa seni bina komputer, seperti Motorola, yang gunakan storan big-endian (big- endian), iaitu bait tertib tinggi disimpan dahulu, dan bait tertib rendah disimpan kemudian.
Dalam penghantaran rangkaian, memandangkan komunikasi merentas platform terlibat, penukaran pesanan bait diperlukan. Contohnya, integer yang disimpan dalam mod little-endian perlu ditukar kepada tertib bait apabila dihantar ke komputer big-endian, jika tidak, penerima tidak akan dapat menghuraikan data dengan betul.
Dalam bahasa PHP, beberapa fungsi disediakan yang boleh digunakan untuk penukaran pesanan bait. Fungsi ini boleh membantu kami menukar daripada susunan bait rangkaian (iaitu, endian besar) kepada susunan bait hos (iaitu, susunan bait asli), atau daripada susunan bait hos kepada susunan bait rangkaian. Berikut ialah beberapa fungsi penukaran pesanan bait PHP yang biasa digunakan:
htonl()
Fungsi ini boleh menukar integer 32-bit daripada susunan bait hos kepada susunan bait rangkaian. Parameter
int htonl (int $hostlong)
$hostlong
ialah integer 32-bit yang perlu ditukar. Nilai pulangan ialah integer 32-bit yang ditukar.
htons()
Fungsi ini menukar integer pendek 16-bit daripada susunan bait hos kepada susunan bait rangkaian. Parameter
int htons (int $hostshort)
$hostshort
ialah integer pendek 16-bit yang perlu ditukar. Nilai pulangan ialah integer pendek 16-bit yang ditukar.
ntohl()
Fungsi ini boleh menukar integer 32-bit daripada susunan bait rangkaian kepada tertib bait hos. Parameter
int ntohl (int $netlong)
$netlong
ialah integer 32-bit yang perlu ditukar. Nilai pulangan ialah integer 32-bit yang ditukar.
ntohs()
Fungsi ini menukar integer pendek 16-bit daripada susunan bait rangkaian kepada tertib bait hos. Parameter
int ntohs (int $netshort)
$netshort
ialah integer pendek 16-bit yang perlu ditukar. Nilai pulangan ialah integer pendek 16-bit yang ditukar.
Yang berikut menggunakan contoh untuk menunjukkan penggunaan fungsi penukaran pesanan bait PHP.
Andaikan integer 32-bit perlu ditukar kepada susunan bait rangkaian dan dihantar melalui rangkaian. Pengirim menggunakan kod berikut untuk penukaran dan penghantaran:
// 要发送的32位整数 $data = 0x12345678; // 转换为网络字节序 $data = htonl($data); // 发送数据 socket_write($socket, $data, 4);
Penerima perlu menukar data yang diterima kepada susunan bait hos, dan boleh menggunakan kod berikut:
// 接收数据 $recvData = socket_read($socket, 4); // 将网络字节序转换为主机字节序 $recvData = ntohl($recvData); echo $recvData;
Seperti yang dapat dilihat daripada kod di atas, Dalam pengaturcaraan rangkaian, fungsi penukaran pesanan bait adalah sangat penting. Dalam PHP, anda boleh menggunakan fungsi seperti htonl()
, htons()
, ntohl()
dan ntohs()
untuk melakukan penukaran pesanan bait dengan mudah, menjadikan komunikasi rangkaian kami lebih dipercayai dan stabil.
Atas ialah kandungan terperinci fungsi penukaran pesanan php bait. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!