【问题标题】:Unpack signed int32 little-endian in PHP在 PHP 中解压已签名的 int32 little-endian
【发布时间】:2017-07-18 15:51:12
【问题描述】:

我有一个要解析的二进制文件。文件的一小部分有一组坐标(纬度和经度)。一个小例子如下:

$data = "64DA7300 0CD5DFFF";

我正在尝试查看整数,但我还没有运气。

$header = unpack("ilatitud/ilongitude", $data);
print_r($header);

我知道正确的数字应该是:(7592548, -2108148),但结果是1094988854, 808465207

有什么想法吗?谢谢。

【问题讨论】:

  • 是ADS-B坐标吗?如果我没记错的话,他们需要的不仅仅是普通的十六进制 -> 二进制转换
  • 它们只是GPS坐标,结果需要除以65536才能得到准确的坐标。但是,我的问题是转换.. :/
  • $data = "64DA7300 0CD5DFFF"; 那不是二进制文件。
  • @tkausl 是的...你的意思是?如果您参考我对二进制的评论,您可以了解 ADS-B GPS 的工作原理。这是飞机发送到地面的东西,告诉他们他们在哪里。使飞行雷达工作的东西。由于全尺寸 GPS 信号对于飞机来说太大了,他们将其压缩为十六进制 -> 二进制 -> 十进制以获取坐标。
  • 我的意思是,您正试图从包含 ascii-hex 形式的 int 的字符串中解压缩二进制 little-endian int。

标签: php unpack endianness int32


【解决方案1】:
$data = "64DA7300 0CD5DFFF";

您的数据不是二进制的,而是十六进制编码的 ascii。先把它变成二进制:

$data = hex2bin(str_replace(" ", "", $data));

然后你的解包就可以了。

Example

【讨论】:

    猜你喜欢
    • 2021-04-10
    • 2013-05-05
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 2018-05-15
    • 2019-06-30
    • 2017-01-03
    • 1970-01-01
    相关资源
    最近更新 更多