【问题标题】:Determine unknown data format of binary data in PHP确定PHP中二进制数据的未知数据格式
【发布时间】:2010-08-28 03:01:24
【问题描述】:

我有混合了 uint32 和空终止字符串的二进制数据。我知道单个数据集的大小(每组数据共享相同的格式),但不知道实际格式。

我一直在使用 unpack 读取数据,功能如下:

function read_uint32( $fh ){
  $return_value = fread($fh, 4 );
  $return_value = unpack( 'L', $return_value );
  return $return_value[1];
}

function read_string( $fh ){
  do{
    $char = fread( $fh, 1 );
    $return_string .= $char;
  }while( ord( $char ) != 0 );
  return substr($return_string, 0, -1);
}

然后基本上尝试这两个函数并查看数据作为字符串是否有意义,如果不是,它可能是一个 int,有没有更简单的方法可以做到这一点?

谢谢。

【问题讨论】:

    标签: php unpack


    【解决方案1】:

    我认为你的方法还可以。 好吧,如果你只得到 ascii 字符串,它很容易,因为最高位总是 0 或 1(在某些奇怪的情况下......)分析文件中的一些字节,然后查看分布可能会告诉你它是 ascii 还是什么二进制。 如果你有不同的编码,比如 utf8 或其他东西,那真的很痛苦。 您可能会寻找重复出现的 CR/LF 字符或过滤掉 0-31 的 raing,只让制表符、cr、lf、ff 滑过。当您分析前 X 个字节并比较非制表符、cr、lf、ff 字符和其他字符的比率时。这将适用于任何编码,因为 ascii 范围是规范的...... 要定义实际的文件类型,最好让它到 os 层并简单地从 shell 调用文件或使用 php 函数来获取 mimetype...

    【讨论】:

      猜你喜欢
      • 2021-12-02
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 2017-06-23
      • 1970-01-01
      • 2016-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多