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

4

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

What I'd want it to return is this:

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

有什么想法吗?
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上运行良好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接