首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用PHP解压缩六进制编码的二进制数据

用PHP解压缩六进制编码的二进制数据
EN

Stack Overflow用户
提问于 2021-03-13 21:16:46
回答 1查看 526关注 0票数 0

我们从合作伙伴的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会是我的朋友,但我就是不明白。任何帮助都将不胜感激,谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-14 12:21:31

他们说输入是一个十六进制字符串,类似于'1C000000010028‘。

代码语言:javascript
运行
复制
$code = '1C000000010028';

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

代码语言:javascript
运行
复制
$binaryData = hex2bin($code);
// "\x1c\x00\x00\x00\x01\x00\x28"

现在你可以打开行李了。

代码语言:javascript
运行
复制
$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,
)
*/

单个数据类型(如布尔值和UInt4 )不包含在pack/unpack格式中。要获得这些数据,您必须使用位运算符

这方面的一个例子:

代码语言:javascript
运行
复制
$byte_0bit2 = (bool)($arr['byte_0'] & 0b00000100);

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66618623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档