Python中int.to_bytes处理整数288未生成第二个字节0x20的问题咨询
Python中int.to_bytes处理整数288未生成第二个字节0x20的问题咨询
大家好,我最近在构造ModBus命令字节数组时遇到了一个奇怪的问题,想请各位帮忙排查下。
我的需求是生成用于发送ModBus命令的字节数组,初始数组已经填充了0x05 0x04(对应设备地址5,读操作),接下来需要计算并添加地址部分。
相关代码片段如下:
async def requestErrorLogNumber(blueClient, errorLogNum): global requestedState # 创建ModBus读取消息 # 目标设备为1号,起始地址基础值加日志编号计算出实际地址 modbusBytes = READ_DEVICE_5 address = 256 + (errorLogNum*32) # 将计算出的地址转换为字节并添加到数组中 byte_address = address.to_bytes(length=2, byteorder='big') modbusBytes += byte_address size = 8 readSize = size.to_bytes(length=2, byteorder='big') modbusBytes += readSize # 计算ModBus报文的CRC校验值 headerCRC = crccheck.crc.Crc16Modbus() headerCRC.process(modbusBytes) tempCrc = headerCRC.final()
现在遇到的问题是:计算得到的address值是288,但调用address.to_bytes(length=2, byteorder='big')后,得到的结果居然是单个字节0x01,而不是预期的0x01 0x20。更奇怪的是,后面处理读取长度8的时候,size.to_bytes(length=2, byteorder='big')却能正确返回0x00 0x08。我甚至直接测试(288).to_bytes(length=2, byteorder='big'),结果还是只有单个字节0x01,实在搞不懂哪里出错了。
附上调试时的截图:
备注:内容来源于stack exchange,提问作者lynnejohn
相关产品推荐
相关产品推荐

