如果你曾經(jīng)使用過byte數(shù)組來處理二進制數(shù)據(jù),那么你一定知道如何把byte數(shù)組轉(zhuǎn)換成十六進制或者其他進制的字符串。而在PHP中,與處理二進制數(shù)據(jù)相關(guān)的函數(shù)都會返回byte數(shù)組,因此你需要知道如何輸出byte數(shù)組。
在PHP中,可以使用echo語句輸出byte數(shù)組,但是輸出結(jié)果并不是你期望的那樣。例如,如果我們有如下的byte數(shù)組:
$bytes = array(0xEF, 0xBB, 0xBF);
直接使用echo語句輸出該byte數(shù)組,會得到如下的結(jié)果:
???
這是因為,echo語句會把byte數(shù)組當作字符串輸出,而對于UTF-8編碼的byte數(shù)組,默認會將字節(jié)序標記輸出為特殊字符。如果你希望輸出正確的結(jié)果,需要使用二進制輸出函數(shù)。
PHP提供了一個二進制安全的輸出函數(shù),即binary-safety-output。這個函數(shù)會將byte數(shù)組逐一輸出,不受默認輸出格式的影響。下面是一個例子:
$bytes = array(0xEF, 0xBB, 0xBF); $output = pack("C*", ...$bytes); // 將byte數(shù)組打包成字符串 echo bin2hex($output); // 以十六進制輸出byte數(shù)組
執(zhí)行以上代碼,你會得到如下的結(jié)果:
efbbbf
這就是正確的輸出結(jié)果。我們利用了pack函數(shù)將byte數(shù)組打包成了字符串,再使用bin2hex函數(shù)將其轉(zhuǎn)換成了十六進制字符串。
除了bin2hex函數(shù),PHP還提供了其他一些二進制輸出函數(shù),如bin2oct、bindec等。這些函數(shù)可以在輸出byte數(shù)組時,幫助你進行進制轉(zhuǎn)換。
總之,在PHP中輸出byte數(shù)組并不難,關(guān)鍵是要了解二進制輸出函數(shù)的用法。只有正確使用這些函數(shù),才能輸出正確的結(jié)果。