PHPでは、 Pack()関数がデータをバイナリ文字列にパッケージ化するために使用されます。これは、ネットワークプログラミング、ファイル操作、および基礎となるデータ構造との相互作用によく使用されます。 Pack()関数の形式文字列では、 AとAは2つの一般的に使用される形式コードです。彼らは非常に似ているように見えますが、実際には微妙な違いがあります。この記事では、 AとAの違いを詳細に説明し、例を通じて実際の使用法を示します。
Pack()関数の構文は次のとおりです。
string pack(string $format, mixed $values, mixed ...$values)
指定された形式に従って、後続のパラメーターをバイナリ文字列に変換します。フォーマット文字列には複数のフォーマットコードを含めることができます。一般的なコードには以下が含まれます。
A :nul byte fill string(文字列が終了した後に\ 0で補充された、指定された長さまでブランク塗りつぶし)。
A :スペースで満たされた文字列(スペースは指定された長さまで満たされ、文字列が終了するとスペースが追加されます)。
以下では、 AとAの違いの説明に焦点を当てています。
フォーマット文字 | 充填方法 | 動作を切り捨てます | 一般的なシナリオ |
---|---|---|---|
a | nul( \ 0 )塗りつぶし | 指定された長さに切り捨てられた長い文字列 | 生データを保存するのに適した固定長のバイナリ文字列が必要です |
a | 空間( )充填 | 指定された長さに切り捨てられた長い文字列 | 読みやすさを維持するテキスト文字列に適しています |
簡単に言えば、パッケージに使用される文字列は「\ 0」を使用して長さを補いますが、 Aはスペースを使用して長さを補います。
<?php
// 使用aフォーマット文字,文字列用NULバイト完了
$str_a = pack("a10", "hello");
echo "使用aフォーマット文字打包结果:" . bin2hex($str_a) . "\n";
// 使用Aフォーマット文字,文字列用空格补齐
$str_A = pack("A10", "hello");
echo "使用Aフォーマット文字打包结果:" . bin2hex($str_A) . "\n";
// 効果を観察するために開梱
echo "aフォーマット文字解包:" . unpack("a10str", $str_a)['str'] . "\n";
echo "Aフォーマット文字解包:" . unpack("A10str", $str_A)['str'] . "\n";
?>
使用aフォーマット文字打包结果:68656c6c6f0000000000
使用Aフォーマット文字打包结果:68656c6c6f2020202020
aフォーマット文字解包:hello
Aフォーマット文字解包:hello
68656C6C6Fは、文字列「Hello」のASCIIコードに対応しています。
Aの場合、余分なバイトに\ 0 (00)が満たされます。
Aの場合、余分なバイトにスペースが満たされています(20)。
これは、後続の処理がストリングテールブランクに敏感である場合、適切なフォーマッタを選択することが重要であることを意味します。
C言語などの基礎となるインターフェイスと対話する必要がある場合、c言語文字列は通常\ 0で終わるため、 Aはよく使用されます。
固定長のテキストデータを転送する必要があり、スペースの視認性を維持したい場合は、 Aを使用する方がより適切です。