PHPプログラミングでは、基礎となるデータ処理、ネットワーク伝送、またはハードウェアデバイスとの対話のために、文字列を16進形式に変換する必要がある場合があります。 PHPは、この機能を簡単に実装するのに役立つ強力なPack()関数を提供します。
この記事では、Pack()関数を使用して文字列を16進形式に変換し、その使用を例と組み合わせて実証する方法を紹介します。
Pack()関数は、データをバイナリ文字列にパッケージ化するために使用されます。パラメーターをバイナリ形式に変換して、指定された形式に従って戻り、バイナリプロトコルパッケージ、ファイルデータライティング、その他のシナリオを生成するためによく使用されます。
関数プロトタイプ:
string pack(string $format, mixed $args, mixed ...$args)
$フォーマットは、データのパッケージ化方法を指定するフォーマット文字列です。
$ argsはパッケージ化されるデータであり、複数になる可能性があります。
Pack()は主にデータのパッケージに使用されますが、 unpack()またはbin2hex()を使用してStringを16進変換に簡単に実装できます。
簡単なアイデアは次のとおりです。
pack()の形式文字h*は、16進の文字列としてエンコードすることを意味します。つまり、16進文字列をバイナリデータに変換します。
ただし、既にヘキサデシマルに変換したい文字列がある場合は、最初にpack()とunpack()を使用でき、同様の効果を達成できます。
ここに、文字列をpack()とbin2hex()を使用して16進数に変換する方法を示す例を示します。
<?php
// 元の文字列
$str = "hello world";
// 使用 pack() パッケージ文字列,フォーマットはです 'a*' 急行 NUL塗りつぶされた文字列
$packed = pack('a*', $str);
// 使用 bin2hex() 转换为十六进制急行
$hex = bin2hex($packed);
echo "元の文字列: " . $str . "\n";
echo "十六进制急行: " . $hex . "\n";
?>
出力結果:
元の文字列: hello world
十六进制急行: 68656c6c6f20776f726c64
A :nul fill文字列
A :スペースが文字列を埋めます
H :ヘキサデシマル文字列、低いビットが前にあります
H :16進数文字列、前に高数桁
C :署名されていない文字(8ビット)
N :署名されていない短い整数(16ビット、ビッグエンディアンエンディアン)
N :署名されていない長い整数(32ビット、ビッグエンディアンエンディアン)
16進数の文字列をパックを介してバイナリに直接処理する場合は、次のようなものを使用できます。
<?php
$hexStr = "68656c6c6f";
$bin = pack('H*', $hexStr);
echo $bin; // 対応する文字列を出力します hello
?>
16進数データをインターフェイスに送信するか、文字列をエンコードして16進形式に保存する場合、上記の方法は非常に効果的です。
たとえば、APIからデータを取得します。
<?php
$url = "https://m66.net/api/data";
$response = file_get_contents($url);
// 応答コンテンツを16進変換します
$hexResponse = bin2hex($response);
echo "応答コンテンツの16進形式:\n";
echo $hexResponse;
?>
Pack()関数を使用して、文字列またはデータを特定の形式でバイナリにパッケージ化できます。
文字列をヘキサデシマルに変換するために、共通の方法はfirst pack() (通常は'a*' )であり、 bin2hex()で変換することです。
また、 Pack( 'h*'、$ hexstring)を使用して、16進列の文字列をバイナリに戻すこともできます。
実際のニーズに応じて、フォーマット文字を合理的に選択し、 pack()とbin2hex()を柔軟に使用します。
この記事を通して、PHPのPack()関数と、文字列と16進の変換技術をマスターできることを願っています。