Серийное чтение Python3 V / S Python 2 - PullRequest
0 голосов
/ 22 мая 2018

Я использую 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 голосов
/ 24 мая 2018

Я наконец понял это, используя следующий код:

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)

Последовательный прием PS или TCP / IP, кажется, следуют той же логике в python, это означает, чтополученные данные требуют одинаковой кодировки.

...