【问题标题】:Parsing "Bytes (Offset Hex text)"解析“字节(偏移十六进制文本)”
【发布时间】:2012-07-12 13:48:16
【问题描述】:

您可以使用wireshark 从udp 数据包中复制字节数据。

它会产生这样的数据

00f00:   21 00 d2 0c 17 ca d9 2f fe 40 be 01 00 37 fa 83  !....../.@...7..
00f09:   21 00 d2 0c 17 ca d9 2f fe 40 be 01 00 37 fa 83  !....../.@...7..
00f10:   2c b3 bd a2                                      ,...

如何使用 php regex 从此文本表中获取数组 (21 00 d2 0c 17 ca d9 2f fe 40 be 01 00 37 fa 83 2c b3 bd a2) 中的所有字节? (从每一行到单个 php 字节数组,甚至更好地到 string

我不仅需要解析wireshark数据(所以关于Bytes(Offset Hex)的建议不起作用)

【问题讨论】:

  • 一行包含 16 个字节,对吧?如果是这样的话,使用strpossubstr 似乎是一种更简单的方法
  • 你为什么不直接使用Copy -> Bytes (Hex Stream) 选项?
  • 从例子中你可以看到,它并不总是16个字节,它可以是1到16个字节。并且“字节(十六进制流)”不起作用,因为我需要从其他程序中解析类似的表。

标签: php regex hex


【解决方案1】:

我认为一个简单的解决方案是将字符串操作与简单的正则表达式结合起来,如下所示:

$output = '';
foreach( explode( "\n", $input) as $line) {
    if( preg_match( '/(?:[a-f0-9]{2}\s){1,16}/i', $line, $matches)) {
        $output .= ' ' . $matches[0];
    }
}

$output = trim( $output);
var_dump( $output);

这个outputs

string(109) "21 00 d2 0c 17 ca d9 2f fe 40 be 01 00 37 fa 83 21 00 d2 0c 17 ca d9 2f fe 40 be 01 00 37 fa 83 2c b3 bd a2" 

【讨论】:

  • 抱歉,这仅占用每一行的第一个字节
  • @Fedcomp - 不是根据我的演示,它完全接受您的输入并使用它来解析十六进制字节。您必须将您的问题更新为失败的输入案例,以便我修复它。
猜你喜欢
  • 2021-10-03
  • 2012-03-04
  • 1970-01-01
  • 2020-06-30
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 2018-08-27
  • 1970-01-01
相关资源
最近更新 更多