PHP中的pack()函數是一種用于將數據打包成二進制字符串的函數,它在很多場景下廣泛使用,如網絡傳輸、進程間通信等等。在使用pack()函數的時候,我們需要指定一個format參數,用于說明打包后的二進制數據的格式。
format參數是一個包含指定格式的字符串,具體的格式有很多種,根據我們的需求選擇合適的格式非常重要。下面我們舉幾個例子:
// 將一個整數打包成4字節的二進制字符串 $binary = pack('l', 123); // 將一個字符串按照UTF-8編碼打包成二進制字符串 $binary = pack('a*', 'hello world!'); // 將一個浮點數打包成4字節的二進制字符串 $binary = pack('f', 3.14);
上面的例子展示了三種不同的format格式,下面我們來逐一解釋:
1. 'l'格式
這種格式用于將一個整數打包成4字節的二進制字符串,其中'l'表示是一個long類型的整數,如果我們有一個整數123,我們可以用下面的代碼將它打包成一個4字節的字符串:
$binary = pack('l', 123); // \x7b\x00\x00\x00
其中,'\x7b'是十六進制的123,因為我們要將整數123表示為4字節的字符串,所以在最后面填充3個字節的0。
2. 'a*'格式
這種格式用于將一個字符串按照UTF-8編碼打包成二進制字符串,其中'a*'表示一個字符串,因為我們不知道字符串的長度,所以需要加上'*'。如果我們有一個字符串'hello world!',我們可以用下面的代碼將它打包成一個二進制字符串:
$binary = pack('a*', 'hello world!'); // \x68\x65\x6c\x6c\x6f\x20\x77\x6f\x72\x6c\x64\x21
其中,'\x68'表示的是字母'h'的ASCII碼,'\x65'表示的是字母'e'的ASCII碼,以此類推。
3. 'f'格式
這種格式用于將一個浮點數打包成4字節的二進制字符串,其中'f'表示是一個float類型的浮點數,如果我們有一個浮點數3.14,我們可以用下面的代碼將它打包成一個4字節的字符串:
$binary = pack('f', 3.14); // \xdb\x0f\x49\x40
其中,'\xdb\x0f\x49\x40'是3.14的IEEE 754標準表示方式,詳情可參考這篇文章:https://www.php.net/manual/en/function.pack.php