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

using sscanf to read fixed length strings

我正在尝试 sscanf 读取一堆连续的固定长度字符串,但效果不是很好。我可以这样打印一个固定长度的字符串:

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

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

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

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

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

除了 %.5s 之外,我还尝试了 %5s 但这也没有达到预期效果。例如

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

那个return是这样的:

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

我想要它 return 是这样的:

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

有什么想法吗?

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

根据 sscanf 评论,这应该有效:

$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 上工作正常。