當前位置: 首頁> 最新文章列表> 如何使用PHP 中的pack() 函數將字符串轉換為十六進制格式?

如何使用PHP 中的pack() 函數將字符串轉換為十六進制格式?

M66 2025-06-15

在PHP 編程中,有時我們需要將字符串轉換成十六進制格式,以便進行底層數據處理、網絡傳輸或者與硬件設備交互。 PHP 提供了強大的pack()函數,可以幫助我們輕鬆實現這一功能。

本文將介紹如何使用pack()函數將字符串轉換為十六進制格式,並結合實例演示其用法。

一、什麼是pack() 函數?

pack()函數用於將數據打包成二進製字符串。它根據指定的格式,把參數轉換成二進制形式返回,常用於生成二進制協議包、文件數據寫入等場景。

函數原型:

 string pack(string $format, mixed $args, mixed ...$args)
  • $format是一個格式字符串,指定瞭如何打包數據。

  • $args是要被打包的數據,可以是多個。

二、字符串轉十六進制的原理

雖然pack()主要用於打包數據,但配合unpack()或者bin2hex() ,可以很方便地實現字符串到十六進制的轉換。

簡單思路是:

  • 直接使用bin2hex()將字符串轉成十六進制;

  • 或者使用pack()以特定格式打包字符串,再用bin2hex()輸出。

三、用pack() 實現字符串轉十六進制

pack()的格式字符H*表示按十六進製字符串編碼,即將十六進製字符串轉換成二進制數據。

但如果你已經有字符串想轉換成十六進制,反而可以先用pack()結合unpack() ,也可以實現類似效果。

以下是一個示例,展示如何用pack()bin2hex()把字符串轉換成十六進制:

 <?php
// 原始字符串
$str = "hello world";

// 使用 pack() 打包字符串,格式為 'a*' 表示 NUL填充的字符串
$packed = pack('a*', $str);

// 使用 bin2hex() 轉換為十六進製表示
$hex = bin2hex($packed);

echo "原始字符串: " . $str . "\n";
echo "十六進製表示: " . $hex . "\n";
?>

輸出結果:

 原始字符串: hello world
十六進製表示: 68656c6c6f20776f726c64

四、常用pack() 格式說明

  • a :NUL填充字符串

  • A :空格填充字符串

  • H :十六進製字符串,低位在前

  • h :十六進製字符串,高位在前

  • C :無符號字符(8位)

  • n :無符號短整型(16位,大端字節序)

  • N :無符號長整型(32位,大端字節序)

如果你想直接通過pack 來處理十六進製字符串轉二進制,可以用類似:

 <?php
$hexStr = "68656c6c6f";
$bin = pack('H*', $hexStr);
echo $bin; // 輸出對應的字符串 hello
?>

五、結合實際場景

假如你要對某個接口發送十六進制數據,或將字符串編碼成十六進制形式存儲,以上方法十分有效。

例如從某API 獲取數據:

 <?php
$url = "https://m66.net/api/data";
$response = file_get_contents($url);

// 將響應內容轉換為十六進制
$hexResponse = bin2hex($response);

echo "響應內容的十六進制格式:\n";
echo $hexResponse;
?>

六、總結

  • pack()函數可以用來將字符串或數據按特定格式打包成二進制。

  • 要將字符串轉換為十六進制,常用方法是先pack() (格式一般為'a*' ),然後用bin2hex()轉換。

  • 也可以利用pack('H*', $hexString)將十六進製字符串轉換回二進制。

  • 根據實際需求,合理選擇格式字符,靈活運用pack()bin2hex()

通過本文介紹,希望你能熟練掌握PHP 中的pack()函數以及字符串與十六進制的轉換技巧。