如何使用python将TCP套接字接收的数据转换为整数?
我正在开发一个python程序来从TCP套接字接收数据。我能够成功地接收ASCII格式的数据。现在我想以用户可读的格式或整数格式查看收到的值。如何将这些值转换为整数形式,并根据接收到的值绘制三维图形。 以下是我收到的连续数据: 输出如何使用python将TCP套接字接收的数据转换为整数?,python,numpy,matplotlib,tcp,tcpclient,Python,Numpy,Matplotlib,Tcp,Tcpclient,我正在开发一个python程序来从TCP套接字接收数据。我能够成功地接收ASCII格式的数据。现在我想以用户可读的格式或整数格式查看收到的值。如何将这些值转换为整数形式,并根据接收到的值绘制三维图形。 以下是我收到的连续数据: 输出 received "['0216', '0212', '0211', '020B', '0214', '020E', '0211', '0210', '0206', '0208', '0206', '0207', '0200', '0208', '0203', '0
received "['0216', '0212', '0211', '020B', '0214', '020E', '0211', '0210', '0206', '0208', '0206', '0207', '0200', '0208', '0203', '0000', '0200', '0000', '0200', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '01FE', '0000', '0000', '0000', '0000', '0000', '0203', '01FF', '0202', '01FF', '0203', '0202', '0207', '0205', '0207', '0213', '0209', '020C', '0212', '021A', '0217\x17']"
received "['0212', '0210', '0212', '020D', '020D', '020C', '020F', '0206', '020B', '020B', '0204', '0205', '0201', '0000', '0201', '01FE', '01FE', '0000', '01FE', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0000', '0200', '0200', '0200', '01FC', '0000', '0202', '0201', '01FE', '0209', '0207', '0208', '020B', '020A', '020B', '020C', '0212']"
...................................................
请在下面的代码中帮助我将这些接收到的值显示为整数,并根据这些接收到的值绘制活动的三维图形
代码
from __future__ import print_function
import socket
import sys
import time
from time import sleep
start = time.time()
def comm_dists(ip, port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = (ip, port)
print(sys.stderr, 'connecting to %s port %s' % server_address)
sock.connect(server_address)
print("Connected")
try:
# Send data
message = b'\x02\x02\x02\x02\x00\x00\x00\x10sMI 0 3 F4724744 '
sock.sendall(message)
print(sys.stderr, 'sending "%s"' % message)
print('sent "%s"' % message)
data = sock.recv(5000)
print(sys.stderr, 'received "%s"' % data)
sleep(0.05)
message = b"\x02\x02\x02\x02\x00\x00\x00\x06sMI 5E'"
sock.sendall(message)
print(sys.stderr, 'sending "%s"' % message)
print('sent "%s"' % message)
data = sock.recv(5000)
print(sys.stderr, 'received "%s"' % data)
sleep(0.05)
message = b'\x02\x02\x02\x02\x00\x00\x00\x05sMI 2e'
sock.sendall(message)
print(sys.stderr, 'sending "%s"' % message)
print('sent "%s"' % message)
data = sock.recv(5000)
print(sys.stderr, 'received "%s"' % data)
sleep(0.05)
message = b'\x02\x02\x02\x02\x00\x00\x00\x07sEI A 1\x0f'
sock.sendall(message)
print(sys.stderr, 'sending "%s"' % message)
print('sent "%s"' % message)
data = sock.recv(5000)
print(sys.stderr, 'received "%s"' % data)
sleep(0.05)
message = b'\x02\x02\x02\x02\x00\x00\x00\x06sRI C5>'
sock.sendall(message)
print(sys.stderr, 'sending "%s"' % message)
print('sent "%s"' % message)
data = sock.recv(5000)
print(sys.stderr, 'received "%s"' % data)
sleep(0.05)
n = 52
while True:
data = sock.recv(5000)
data = data.decode("utf-8", errors='ignore')
data = data.replace('\x02', '')
data = data.replace('\x00', '')
data = data.replace('\x05', '')
data = data.replace('sRA', '')
data = data.replace('sSI', '') #comandAns
data = data.replace('000A', '') #distResolution
data = data.replace('425C0000', '') #startAngle
data = data.replace('3E800000', '')
data = data.replace('0118', '') #angularStep
data = data.split()
print('received "%s"' %data)
finally:
print(sys.stderr, 'closing socket')
return data
i=0
while i < int(1):
data = comm_dists('192.168.0.1', 2111)
i=i+1
from\uuuuu future\uuuuu导入打印功能
导入套接字
导入系统
导入时间
从时间上导入睡眠
开始=时间。时间()
def通信区(ip、端口):
sock=socket.socket(socket.AF\u INET,socket.sock\u流)
服务器地址=(ip,端口)
打印(sys.stderr,'连接到%s端口%s'%1!''服务器\u地址)
sock.connect(服务器地址)
打印(“连接”)
尝试:
#发送数据
消息=b'\x02\x02\x02\x02\x00\x00\x00\x10sMI 0 3 F47244'
sock.sendall(消息)
打印(sys.stderr,'发送“%s%”消息)
打印('已发送“%s”%消息)
数据=sock.recv(5000)
打印(sys.stderr,'接收到“%s”%%数据)
睡眠(0.05)
消息=b“\x02\x02\x02\x02\x00\x00\x00\x06sMI 5E”
sock.sendall(消息)
打印(sys.stderr,'发送“%s%”消息)
打印('已发送“%s”%消息)
数据=sock.recv(5000)
打印(sys.stderr,'接收到“%s”%%数据)
睡眠(0.05)
消息=b'\x02\x02\x02\x02\x00\x00\x00\x00\x05sMI 2e'
sock.sendall(消息)
打印(sys.stderr,'发送“%s%”消息)
打印('已发送“%s”%消息)
数据=sock.recv(5000)
打印(sys.stderr,'接收到“%s”%%数据)
睡眠(0.05)
消息=b'\x02\x02\x02\x02\x00\x00\x00\x07sEI A 1\x0f'
sock.sendall(消息)
打印(sys.stderr,'发送“%s%”消息)
打印('已发送“%s”%消息)
数据=sock.recv(5000)
打印(sys.stderr,'接收到“%s”%%数据)
睡眠(0.05)
消息=b'\x02\x02\x02\x02\x00\x00\x00\x065>'
sock.sendall(消息)
打印(sys.stderr,'发送“%s%”消息)
打印('已发送“%s”%消息)
数据=sock.recv(5000)
打印(sys.stderr,'接收到“%s”%%数据)
睡眠(0.05)
n=52
尽管如此:
数据=sock.recv(5000)
数据=数据。解码(“utf-8”,错误=”忽略“)
数据=数据。替换('\x02','')
数据=数据。替换('\x00','')
数据=数据。替换('\x05','')
数据=数据。替换('sRA','')
数据=数据。替换('sSI','')#comandAns
数据=数据。替换('000A','')#分配
数据=数据。替换('425C0000','')#startAngle
数据=数据。替换('3E800000','')
数据=数据。替换('0118','')#角度步骤
data=data.split()
打印('收到“%s”%个数据)
最后:
打印(sys.stderr,“关闭插座”)
返回数据
i=0
而i
预期结果:
由于您收到了一个列表,通过列表理解,您应该得到如下整数:
integer_data = [int.from_bytes(bytes.fromhex(item[0:3]), 'big') for item in data[:-2]]
另一种解码用于数据的小端编码:
integer_data = [int.from_bytes(bytes.fromhex(item[0:3]), 'little') for item in data[:-2]]
这将保留您的数据结构并将所有内容转换为整数,请记住,这不是处理此问题的非常有效的方法,因为您可以从另一端首先发送整数 我收到了以下错误:``文件“C:/Users/PycharmProjects/LaserRec.py”,第77行,在comm_dists integer_data=[int(item)for item in data]文件“C:/Users/PycharmProjects/LaserRec.py”,第77行,in integer_data=[int(item)for item in data]ValueError:int()的文本无效以10为基数:“00C5”``哦,您的信息是用十六进制编码的,让我编辑答案,十六进制在应用上述解决方案后,十六进制数据=[hex(项目)表示数据中的项目]收到以下错误:
hex_数据=[hex(项目)表示数据中的项目]TypeError:“str”对象不能解释为整数
现在它应该可以工作了,但请记住,您有一些损坏的数据,例如列表的最后一个条目包含“0217\x17”],它似乎不是有效的整数。是的,_一些损坏的数据,如“0217\x17”]正在造成严重问题。它显示错误:ValueError:fromhex()arg中第5位的非十六进制数是否有解决方案可以排除最后两个条目?