在處理底層數據或網絡編程時,我們經常會遇到二進制與十六進制之間的轉換需求。幸運的是,PHP 提供了簡潔易用的內建函數來幫助我們完成這一任務,最常用的就是bindec()和base_convert() 。
bindec()是PHP 的一個內建函數,它可以將二進製字符串轉換為十進制數。而dechex()則可以將十進制數轉換為十六進製字符串。結合這兩個函數,我們就可以完成二進製到十六進制的轉換。
在這個例子中, 11010110被轉換成了十進制的214 ,然後再轉換成十六進制的D6 。
如果你覺得先轉十進制再轉十六進制太繁瑣,PHP 的base_convert()提供了一種更加直接的方法。該函數允許我們直接指定源基數和目標基數,從而快速實現進制轉換。
這個函數的第一個參數是要轉換的字符串,第二個參數是原始進制(這裡是2),第三個參數是目標進制(這裡是16)。
傳入的二進製字符串必須是合法的二進制數字(只包含0 和1),否則bindec()和base_convert()都可能返回意想不到的結果。
使用base_convert()時返回值是字符串類型,如果需要十六進制數在其他進制之間繼續轉換,應注意類型轉換。
如果需要補齊位數,可以使用str_pad()函數。例如要始終輸出2 位十六進制數,可以這樣寫:
這種轉換在處理網絡數據包、顏色代碼(如RGB 值)、位圖數據等場景下十分常見。比如,當你接收到一個二進制數據流時,想要將其以十六進制形式打印出來以便調試:
<code> $data = ['11000011', '10101010', '11110000']; foreach ($data as $binary) { echo strtoupper(base_convert($binary, 2, 16)) . " "; } // 輸出: C3 AA F0 </code>你還可以將結果作為十六進制顏色輸出,例如:
<code> $r = '11110000'; $g = '10101010'; $b = '11000011'; $hexColor = '#' . strtoupper(base_convert($r, 2, 16)) . strtoupper(base_convert($g, 2, 16)) . strtoupper(base_convert($b, 2, 16)); echo $hexColor; // 輸出: #F0AAC3 </code>如果你從遠程接口獲取了一段二進制編碼數據,比如:
<code> $response = file_get_contents('https://m66.net/api/data/binary'); $data = json_decode($response, true); // 假設返回的是['11001100', '11110000'] foreach ($data as $binary) { echo strtoupper(base_convert($binary, 2, 16)) . " "; } // 輸出: CC F0 </code>通過結合file_get_contents() 、 json_decode()和base_convert() ,我們可以快速地將二進制數據轉換成可讀的十六進制格式進行處理和展示。