从 python bytes-str 生成 4 字节校验和
Generating 4 bytes checksum from python bytes-str
我正在设置与设备的 uart 通信,但我不知道如何生成验证我发送的数据所需的四字节校验和。在仪器手册中说校验和是"a 32-bit unsigned value that sums all the bytes in Data Header and Data Payload. Checksum overflows are truncated"。
除其他外,我尝试过对所有数据字节数组求和,然后将其转换为字节。但无论我尝试什么,我从设备得到的响应都是错误消息。我认为这是由于错误的校验和。
我正在尝试使用下面的函数来连接所有需要的字节。我使用 pyserial 库发送数据。
def empacota(flags, sequence, command, data):
cksumMsg = b""
uart_header = b"\x41\x42\x43\x44"
uart_end = b"\x44\x43\x42\x41"
data_len = bytes(len(data) + 2)
cksumMsg += flags + sequence + data_len + command + data
cksumMsg_array = bytearray(cksumMsg)
checksum_int = sum(cksumMsg_array)
checksum = checksum_int.to_bytes(5, "little")
package_data = uart_header + checksum + cksumMsg + uart_end
return(package_data)
在学习了一些二进制和按位运算符之后,我可以进行通信了。这是生成我的包数据的工作函数。
def empacota(flags, sequence, command, data):
cksumMsg = b''
UARTHeader = b"\x41\x42\x43\x44"
UARTTrailer = b"\x44\x43\x42\x41"
data_len = len(data) + 2
cksumMsg += bytes(flags + sequence) + data_len.to_bytes(2,
byteorder='little') + bytes(command + data)
checksum_int = (sum(cksumMsg))
checksum = checksum_int.to_bytes(4, "little")
package_data = UARTHeader + checksum + cksumMsg + UARTTrailer
return(package_data)
我正在设置与设备的 uart 通信,但我不知道如何生成验证我发送的数据所需的四字节校验和。在仪器手册中说校验和是"a 32-bit unsigned value that sums all the bytes in Data Header and Data Payload. Checksum overflows are truncated"。
除其他外,我尝试过对所有数据字节数组求和,然后将其转换为字节。但无论我尝试什么,我从设备得到的响应都是错误消息。我认为这是由于错误的校验和。 我正在尝试使用下面的函数来连接所有需要的字节。我使用 pyserial 库发送数据。
def empacota(flags, sequence, command, data):
cksumMsg = b""
uart_header = b"\x41\x42\x43\x44"
uart_end = b"\x44\x43\x42\x41"
data_len = bytes(len(data) + 2)
cksumMsg += flags + sequence + data_len + command + data
cksumMsg_array = bytearray(cksumMsg)
checksum_int = sum(cksumMsg_array)
checksum = checksum_int.to_bytes(5, "little")
package_data = uart_header + checksum + cksumMsg + uart_end
return(package_data)
在学习了一些二进制和按位运算符之后,我可以进行通信了。这是生成我的包数据的工作函数。
def empacota(flags, sequence, command, data):
cksumMsg = b''
UARTHeader = b"\x41\x42\x43\x44"
UARTTrailer = b"\x44\x43\x42\x41"
data_len = len(data) + 2
cksumMsg += bytes(flags + sequence) + data_len.to_bytes(2,
byteorder='little') + bytes(command + data)
checksum_int = (sum(cksumMsg))
checksum = checksum_int.to_bytes(4, "little")
package_data = UARTHeader + checksum + cksumMsg + UARTTrailer
return(package_data)