ホームページ >バックエンド開発 >PHPチュートリアル >PHP読み込みバイナリストリーム(C言語構造体構造体データファイル)の徹底解析_PHPチュートリアル

PHP読み込みバイナリストリーム(C言語構造体構造体データファイル)の徹底解析_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:07:101302ブラウズ

php は C 言語で開発されていますが、私を困惑させているのは、php が構造体 struct を直接サポートしていないことです。
ただし、PHP には、バイナリ データと PHP 内部データを変換するためのパック関数とアンパック関数が用意されています:

コードをコピーします コードは次のとおりです:

string Pack ( string $format [,mixed $args [,mixed $...]] )
//指定された引数を形式に従ってバイナリ文字列にパックします。
array unpack ( string $format, string $data )
//指定された形式に従ってバイナリ文字列から配列に解凍します。
その中で、$format は Perl のパック形式に似ており、次のものが含まれます (中国語は私が追加したものです。不正確な点があればお気軽に指摘してください):
NUL で埋められた文字列、つまり "
しかし、非常に微妙なことが起こりました。それが strpos のバグなのか、substr のバグなのかはわかりません (実際、テストしてみればわかりますが、一部の文字列は問題ありませんが、一部の文字列は試しません)。 null 値のみを取得できます (つまり、$name = = ")。私は非常に落ち込んでいたのですが、strtok 関数を見つけました。今では問題はありません。
これだけ読むのは誰にとっても難しいです。ここに完全なものがあります。 PHP でバイナリ データ ストリーム (C 言語の構造体データ) ファイルを読み取るサンプル コード:
最初に、デモンストレーションのために、より単純なものを書きます。$format 形式と比較しても問題ありません。上の表:



コードをコピーします。 コードは次のとおりです:
char name[10]
int age
};


たとえば、「file.dat」ファイルがあり、その内容は上記の N BIANBIAN 構造です。PHP コードは次のようになります:



コードをコピーします

コードは次のとおりです:
? & Lt;? PHP
// Struct に従って $ フォーマットを決定します。私の 32 ビット Linux は長さが 4 であることに注意してください。 $ format = 'A10Name/A33Pass/IAGE/CFLAG' ;
// 構造体が占めるバイト数を決定する
$length = 10 + 33 + 4 + 1; // fopen + fread + を使用することもできます。 fclose ですが、 file_get_contents は mmap でき、より効率的です
$data = file_get_contents('file.dat', 'r');
for ($i = 0, $c = strlen($data); $i < $c; $i += $ length) {
if (is_string($値)) {




http://www.bkjia.com/PHPjc/327566.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/327566.html

技術記事
PHP は C 言語で開発されていますが、私を困惑させたのは、PHP が構造体 struct を直接サポートしていないことです。 ただし、PHP はバイナリ データのパック関数とアンパック関数を提供します (...


)
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。