如何在python中解析套接字中的二进制数据?

如何在python中解析套接字中的二进制数据?,python,parsing,sockets,modem,Python,Parsing,Sockets,Modem,我目前正在进行一个项目,需要与微硬蜂窝调制解调器IPn3G通信。我设置了调制解调器,通过TCP向我的计算机发送消息,我可以在套接字中接收消息 但消息如下所示: ���������DKReadyCANRogersWirelessInc. Home354626030393530302720391029547 现在,我可以识别其中的一些字段,如状态或Carrierinfo以及最后的imei和imsi 我的问题是,我如何解析那些看起来很滑稽的东西?我试过struct,但它似乎对我帮助不大 在调制解调器

我目前正在进行一个项目,需要与微硬蜂窝调制解调器IPn3G通信。我设置了调制解调器,通过TCP向我的计算机发送消息,我可以在套接字中接收消息

但消息如下所示:

���������DKReadyCANRogersWirelessInc. Home354626030393530302720391029547
现在,我可以识别其中的一些字段,如状态或Carrierinfo以及最后的imei和imsi

我的问题是,我如何解析那些看起来很滑稽的东西?我试过struct,但它似乎对我帮助不大

在调制解调器的文档中,我只找到以下内容:

调制解调器\u事件消息结构:

固定头固定大小20字节 调制解调器ID uint64_t 8字节 消息类型掩码uint8_t1字节 含蓄的 数据包长度uint16_t2字节 注意:数据包长度=固定报头的长度+消息有效负载的长度。 运营商信息:

内容长度2字节UINT16\u T RSSI 1字节UINT8\u T 射频波段2字节UINT16\u T 服务类型字符串1-30字节 通道编号字符串1-30字节 SIM卡号字符串1-30字节 电话号码字符串1-30字节 在我看来,这条信息似乎与它的本意不符。如果有人能就如何解决这个问题提出建议,我将非常高兴

谢谢你

Python有一个很棒的模块,它允许你打包和解包二进制数据

我明白了,你已经试着用过了。我没有你的设备的文档,去检查一下吧!,但我可以假设,字符串是以null结尾的,它们的大小以前在任何地方都没有给定

从其他字段的大小和数据包长度中获取消息字符串部分的大小,并使用s将所有字符串读入一个Python字符串,然后将它们拆分为空字符。

Python具有强大的模块,允许您打包和解包二进制数据

我明白了,你已经试着用过了。我没有你的设备的文档,去检查一下吧!,但我可以假设,字符串是以null结尾的,它们的大小以前在任何地方都没有给定


从其他字段的大小和数据包长度中获取消息字符串部分的大小,并使用s将所有字符串读取为一个Python字符串,然后将它们拆分为空字符。

消息的外观(例如打印到控制台时)不是很有用。特别是,不太可能显示任何NUL'\x00'字节。文档中是否显示了保留的时间,而不是打印消息?我可以识别其中一些字段,如状态或Carrierinfo,这是什么意思?什么是地位?固定头应该是什么?@JohnMachin:reprmessage的新输出是\xb7\xff\xff\xff\xff\xff\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Z\x00D\x00\xf3\x00\x00Ready\x00canrogerwirelessinc。\x00Home\x003546200393530\x00302720391029547\x00。文档也没有说明固定头中保留了多长时间或保留了什么。我识别出几个字段,如Status=Ready、Carrier=CANRogersWirelessInc、Home=Home、IMEI=354626030393530和IMSI=302720391029547。但是它们实际上不应该在输出中,所以我不知道这是否是标题的一部分。您显示的消息在以Ready开头的可变长度字符串之前只有25个字节。正如您所说,它与两个文档片段都不匹配。您有文档问题,我们无法帮助您解决。当然,该设备必须使用一些国际标准协议进行通信…消息的外观(例如,当打印到控制台时)不是很有用。特别是,不太可能显示任何NUL'\x00'字节。文档中是否显示了保留的时间,而不是打印消息?我可以识别其中一些字段,如状态或Carrierinfo,这是什么意思?什么是地位?固定头应该是什么?@JohnMachin:reprmessage的新输出是\xb7\xff\xff\xff\xff\xff\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Z\x00D\x00\xf3\x00\x00Ready\x00canrogerwirelessinc。\x00Home\x003546200393530\x00302720391029547\x00。文档也没有说明固定头中保留了多长时间或保留了什么。我识别出几个字段,如Status=Ready、Carrier=CANRogersWirelessInc、Home=Home、IMEI=354626030393530和IMSI=302720391029547。但是它们实际上不应该在输出中,所以我不知道这是否是标题的一部分。您显示的消息在以Ready开头的可变长度字符串之前只有25个字节。正如您所说,它与两个文档片段都不匹配。您有文档问题,我们无法帮助您解决。当然,这个设备必须使用一些国际标准协议来通信。。。