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 回答