0

PUSH サービスからデータを受け取ります。このデータは gzcompress() で圧縮されます。データの先頭には、含まれるデータの長さである int が含まれています。これは gzcompress(); の後に行われます。したがって、サンプル データは次のようになります。

187xœËHÍÉÉ,

によって生成されます

echo '187'.gzcompress('Hello');

int の長さはわかりません。1 桁かもしれませんし、10 桁かもしれません。また、文字列の先頭の位置を見つけるための最初の文字もわかりません。

int を取得/減算する方法についてのアイデアはありますか?

$length_value=???
$string_value=???
4

3 に答える 3

2

圧縮されたデータが数字で始まることはないと仮定すると、正規表現が最も簡単になります。

$string = '187xœËHÍÉÉ,';
preg_match('/^(\d+)/', $string, $matches);
$number = $matches[0];
$compressed_data = substr($string, 0, strlen($number));

圧縮データが数字で始まる場合、データが破損することになります。たとえば、「長さ」の値がどこで停止し、圧縮されたデータがどこで始まるかを区別する方法はまったくありません。

$compressed = '123foo';
$length = '6';

$your_string = '6123foo';

わかりました - これは長さ 61 の文字列で、圧縮データは 23foo ですか? または 612 + 3foo?

于 2013-07-29T15:15:43.767 に答える
0

preg_match()文字列の先頭で整数をキャッチする ために使用できます。http://php.net/manual/en/function.preg-match.php

于 2013-07-29T15:14:39.647 に答える
0

あなたがすることができます:

$contents = "187xœËHÍÉÉ,";
$length = (int)$contents;
$startingPosition = strlen((string)$length);
$original = gzuncompress(substr($contents, $startingPosition), $length);

しかし、最初の圧縮バイトが数値の場合、これは失敗する可能性があると思います。

于 2013-07-29T15:16:28.537 に答える