如何使用python将TCP套接字接收的数据转换为整数?

如何使用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

我正在开发一个python程序来从TCP套接字接收数据。我能够成功地接收ASCII格式的数据。现在我想以用户可读的格式或整数格式查看收到的值。如何将这些值转换为整数形式,并根据接收到的值绘制三维图形。 以下是我收到的连续数据:

输出

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
预期结果:

  • 将接收到的输出显示为整数

  • 根据接收到的插座坐标绘制3D图形


  • 由于您收到了一个列表,通过列表理解,您应该得到如下整数:

    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位的非十六进制数是否有解决方案可以排除最后两个条目?