微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 PHP 中解压十六进制编码的二进制数据

如何解决在 PHP 中解压十六进制编码的二进制数据

我们正在从合作伙伴的 IoT 设备中收集数据,这些数据以包含二进制数据的 1C000000010028 等十六进制字符串编码:

  • 字节 0 位 0 布尔值
  • 字节 0 位 1 布尔值
  • 字节 0 位 2 布尔值
  • 字节 0 位 3 布尔值
  • 字节 0 位 4-7 UInt4
  • 字节 1-2 位 0-15 UInt16
  • 字节 3 位 0-7 UInt8
  • 字节 4-5 位 0-15 UInt16
  • 字节 6 位 0-7 UInt8

我从来没有处理过这种数据,我想知道如何在 PHP 中解码/解压它。我猜 https://www.php.net/manual/de/function.unpack.php 会是我的朋友,但我不明白。任何帮助将不胜感激,谢谢!

解决方法

他们说输入是一个像'1C000000010028'这样的十六进制字符串。

$code = '1C000000010028';

要使用 unpack(),数据必须是带有 binaryData 的字符串。您可以使用 hex2bin 进行转换。

$binaryData = hex2bin($code);
// "\x1c\x00\x00\x00\x01\x00\x28"

现在您可以使用解包了。

$arr = unpack('Cbyte_0/vUInt16_0/Cbyte_1/vUInt16_1/Cbyte_2',$binaryData);
/*
$arr = array (
  'byte_0' => 28,'UInt16_0' => 0,'byte_1' => 0,'UInt16_1' => 1,'byte_2' => 40,)
*/

单独的数据类型,如 Boolean 和 UInt4 不包括在打包/解包格式中。要获取此数据,您必须使用 bit operators

仅举一个例子:

$byte_0bit2 = (bool)($arr['byte_0'] & 0b00000100);

这可能会导致更多问题,可以在 Stackoverflow 上找到答案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。