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

问题描述 投票:4回答:1

我正在尝试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"
}

有什么想法吗?

php scanf
1个回答
1
投票

问题是,使用%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上工作正常。

© www.soinside.com 2019 - 2024. All rights reserved.