【发布时间】:2016-12-14 12:14:56
【问题描述】:
我有一个规范,其中概述了指令应如何通过串行发送。
目前我正在制作将通过连接的数据包。
数据包的一个片段,需要一个 32 位(4 字节)的二进制数。 前 31 位是“数据”,最后一位只是一个标志。
因此,数据中可以容纳的最大十进制数是:2147483647 (2^31)。数据永远不会比这更大,酷!
我的问题是如何将数据编码为 31 位二进制,然后设置最后一位以启用标志?
假设我的数据是 7AAAAAAA 将其转换为 31 位二进制然后在末尾添加 1 或 0 的理想方法是什么?
编辑 - 我使用的是 Python 3.4
【问题讨论】:
-
查看
struct模块以及位修改运算符|。 -
在这种情况下使用
struct可能会出现问题,因为您的数据编号不是 4 位整数。结构仅对完整字节进行操作。 -
对于硬编码数据,您可以执行
(0x7AAAAAAA<<1) | flag之类的操作。但无论如何,您都应该使用struct以可识别字节序的方式处理字节转换。 -
Python 中的位摆弄可能有点棘手,因为我们没有无符号整数,而且我们的整数不是固定字节长度的。但是,仔细使用
struct确实不是问题。
标签: python binary hex python-3.4 pyserial