2012-04-27 76 views
1

我目前正在开发一个项目,需要与微硬调制解调器IPn3G进行通信。我有调制解调器设置为通过TCP向我的计算机发送消息,我可以在套接字中接收消息。如何在python中解析来自套接字的二进制数据?

的消息是这样的,虽然:

���������DKReadyCANRogersWirelessInc. Home354626030393530302720391029547 

现在,我可以承认其中的一些领域,如最终状态或Carrierinfo还有IMEI和IMSI的。

我的问题是,我该如何解析有趣的东西?我尝试过struct,但它似乎没有帮我很多。

在调制解调器我只找到这个的文档:

Modem_event消息结构:

  • 固定报头(固定大小20个字节)
  • 调制解调器ID(uint64_t中(8个字节))
  • 消息类型掩膜(uint8_t(1个字节))
  • 保留
  • 分组长度(uint16_t(2个字节)) 注意:数据包长度=固定报头长度+报文有效载荷长度。

载波信息:

  • 内容长度2个字节(UINT16_T)
  • RSSI 1字节(UINT8_T)
  • RF频带2个字节(UINT16_T)
  • 服务类型STRING(1- 30个字节)
  • 通道号STRING(1-30字节)
  • SIM卡号STRING(1-30字节)
  • 手机串号(1-30字节)

对我来说,这似乎是消息不即使它应该是排队。如果有人就如何解决这个问题提出建议,我会很高兴。

谢谢

+1

什么信息“看起来像”例如当打印到您的控制台不是很有用。特别是任何NUL(''\ x00'')字节不太可能出现。文档显示“保留”的时间长度是多少?而不是“打印消息”是否打印重新生成(消息)' – 2012-04-28 00:19:50

+0

? “我可以识别一些像Status或Carrierinfo这样的字段”中的“或”是什么意思?什么是“状态”?什么应该在“固定标题”? – 2012-04-28 00:28:29

+0

@JohnMachin:repr(message)的新输出是“\ xb7 \ xff \ xff \ xff \ xff \ xff \ xff \ xff \ x04 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00Z \ x00D \ X00 \ XF3 \ X00 \ x00Ready \ x00CANRogersWirelessInc。\ x00Home \ x00354626030393530 \ x00302720391029547 \ X00" 。 – masterlampe 2012-04-28 16:38:31

回答

0

Python有很大struct模块,它可以让你打包和解包二进制数据。

我明白了,您已经尝试过使用它。我没有文档,对于你的设备(去检查它!),但我可以假设,这些字符串是空终止的(它们没有它们的大小)。

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

相关问题