python3 serial read v / s python 2

时间:2018-05-22 18:25:54

标签: python tcp serial-port

我使用raspberry pi通过TCP / IP发送数据,其中raspberry pi是服务器,而我的本地Windows机器是客户端。

当我尝试在python 3中读取数据时,我得到了奇怪的字符,例如:

send 20 decimal I receive @4

send 21 decimal I receive @5

send 22 decimal I receive @6

以下是我本地计算机上运行的代码:

import socket
host = '192.168.1.100'
port = 25000
mySocket = socket.socket()
mySocket.connect((host,port))
data = mySocket.recv(4).decode()
print (data)

使用python 2没有问题,收到的字符无需解码。我知道我需要对数据进行一些解码,但不确定是什么。任何建议都会非常有用。

1 个答案:

答案 0 :(得分:0)

我终于通过使用以下代码来解决这个问题:

data = mySocket2.recv(4)
newData = int.from_bytes(data, byteorder='big', signed=False)

发件人正在发送uint32数据,这显然是未签名的并且是bigEndian。这也必须在接收方指定(我的python3脚本)。如果发件人更改并开始发送int8数据,那么我需要将接收者代码更新为以下内容:

data = mySocket2.recv(1)
newData = int.from_bytes(data, byteorder='big', signed=True)

P.S。串行或TCP / IP接收似乎遵循python中的相同逻辑,这意味着接收的数据需要相同的编码。