當前位置: 首頁> 最新文章列表> 用hexdec + bin2hex 進行二進制和十進制的轉換

用hexdec + bin2hex 進行二進制和十進制的轉換

gitbox 2025-05-27

在日常的PHP 編程過程中,數據轉換是一項非常常見的操作,尤其是在處理底層通信、加密算法或數據解析時,常常需要在二進制、十六進制和十進制之間進行轉換。本文將通過hexdec()bin2hex()兩個PHP 原生函數,教你如何實現從二進製到十進制的高效轉換。

為什麼不直接用bindec?

PHP 提供了bindec()函數來直接將二進製字符串轉換為十進制數字,那麼我們為什麼還需要用hexdec()bin2hex()呢?

答案是:更強的靈活性與兼容性。

  • bindec()只適用於純由01組成的字符串,且在處理大數或二進制原始數據(例如字節流)時容易出錯。

  • bin2hex()hexdec()則可以處理原始的二進制數據( binary strings ),在處理低層數據包、加密或文件格式解析時更為穩定可靠。

基本用法講解

1. bin2hex() – 二進制轉十六進制

這個函數的作用是把一個二進製字符串(注意,是PHP 中的binary string,而不是用01表示的字符串)轉換為十六進製表示:

 $data = "\x0A"; // 十進制為 10 的字節
$hex = bin2hex($data);
echo $hex; // 輸出: 0a

2. hexdec() – 十六進制轉十進制

將十六進製字符串轉換為十進制整數:

 $hex = "0a";
$decimal = hexdec($hex);
echo $decimal; // 輸出: 10

聯合使用實現二進製到十進制

假設我們從某個API 或底層文件中讀取到了一個二進製字節流,我們希望將其轉換為十進制數值。代碼如下:

 $binary = "\x01\x02"; // 這是兩個字節: 00000001 00000010

$hex = bin2hex($binary);       // 輸出: 0102
$decimal = hexdec($hex);       // 輸出: 258

echo "十進制值為: " . $decimal;

這裡的"\x01\x02"實際上等價於二進制00000001 00000010 ,組合後為十六進制的0102 ,轉換為十進制正好是258。

一個真實的使用場景

假設你正在開發一個與硬件設備通信的接口,該設備通過Socket 向你返回了2 個字節表示溫度,你收到的原始數據如下:

 $socketData = "\x00\x7D"; // 這表示十六進制的 007D

你希望將它轉換為十進制數值以顯示溫度讀數:

 $hex = bin2hex($socketData);   // 輸出: 007d
$temperature = hexdec($hex);   // 輸出: 125

echo "當前溫度為: " . $temperature . "°C";

附加:如何處理大端與小端格式?

如果你接收到的數據是以小端(Little Endian)方式編碼的(低字節在前),你需要先反轉字節順序:

 $littleEndian = "\x7D\x00";
$bigEndian = strrev($littleEndian); // 轉為大端順序
$decimal = hexdec(bin2hex($bigEndian)); // 正確解析為 125

echo $decimal; // 輸出: 125

小結

bin2hex()hexdec()是PHP 中處理二進制數據非常重要的工具組合,它們在處理文件流、底層協議、數據解析等場景下表現尤為出色。雖然bindec()更適合用來處理簡單的二進製字符串,但在面對更複雜的數據格式時, bin2hex()hexdec()的組合無疑更強大也更穩定。

如果你想深入學習這類數據處理技巧,可以訪問:

<code> https://gitbox.net/php/hexdec-bin2hex-guide </code>

掌握這些底層技巧,讓你的PHP 編程更加專業和高效!