0
我正在编写创建使用特定协议通过CANBUS发送消息的代码。这样的消息的数据字段的示例格式是:使用8位编码将二进制转换为bytearray
[FROM_ADDRESS(1个字节)] [control_byte(1个字节)] [标识符(3个字节)] [长度(3个字节)]
的数据字段需要格式化为列表或字节数组。我的代码目前执行以下操作:
data = dataFormat((from_address << 56)|(control_byte << 48)|(identifier << 24)|(length))
其中DATAFORMAT定义如下:
def dataFormat(num):
intermediary = BitArray(bin(num))
return bytearray(intermediary.bytes)
这不正是我想要它,除了当FROM_ADDRESS是可以在更短的描述了一些比8位。在这些情况下bin()
返回字符长度的二进制不是由8整除(外来零被丢弃),等等intermediary.bytes
抱怨转换是不明确:
InterpretError: Cannot interpret as bytes unambiguously - not multiple of 8 bits.
我不依赖于任何在上面的代码 - 任何方法来获取一个整数序列并将其转换为一个bytearray(以字节为单位的正确大小)将不胜感激。
这需要标签[tag:can]用于什么? – usr2564301
@RadLexus它是can消息的一部分。我想,这与手边的问题没有特别的关系。 – oirectine
为什么不使用CAN控制器寄存器的消息结构?标识符和长度是CAN帧的专用字段,而其他的东西必须存储在数据字段中。 – Lundin