使用sscanf读取固定长度的字符串

时间:2015-06-01 12:35:32

标签: php scanf

我试图sscanf读取一堆连续的固定长度字符串,但它不能很好地工作。我可以打印一个固定长度的字符串:

sprintf('%.5s', 'aaaaabbbbb');

但是如果我尝试使用%.5s来读取固定长度的字符串(例如输入字符串的前5个字节),那么它就不起作用了。例如

var_dump(sscanf('aaaaabbbbb', '%.5s'));

如果我这样做var_dump返回NULL,我会收到以下警告:

Warning: sscanf(): Bad scan conversion character "."

除了%5s之外,我还尝试了%.5s,但这也不能按预期工作。例如

var_dump(sscanf('aa aabbbbb', '%5s'));

返回:

array(1) {
  [0]=>
  string(2) "aa"
}

我希望它返回的是:

array(1) {
  [0]=>
  string(5) "aa aa"
}

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

问题是任何空格字符都被视为使用%s的新输入。

根据http://php.net/manual/en/function.sscanf.php评论,这应该有效:

$result = sscanf("  Vendor: My Vendo Model: Super Model Foo  Rev: 1234", 
             '  Vendor: %8[ -~] Model: %16[ -~] Rev: %4c',
             $vendor, $model, $rev);

所以,在你的情况下:

var_dump(sscanf('aa aabbbbb', '%5[ -~]'));

在PHP 5.2.10上运行正常。