使用python将十六进制字符串发送到套接字

时间:2015-04-10 05:38:06

标签: python sockets

亲爱的朋友们,这是一个谦虚的要求,以示例来解决我的问题。 我正在研究RFID传感器,我需要将十六进制数据发送到插座。这是我的代码

import socket

HOST = '192.168.0.115' 
PORT = 20108
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
DATA = 'A5 5A 00 08 04 0C 0D 0A'
s.send(DATA)
data = s.recv(4096)
s.close()
d = data.encode('hex').upper()
print 'Received', repr(d)

此代码以字符串格式发送DATA但我需要以十六进制格式发送数据,因为RFID阅读器可以读取十六进制数据...我已经使用了struct.pack但它不适用于我或者可能是我不喜欢#39;知道如何使用它...... DATA与"A5 5A 00 08 04 0C 0D 0A"相同,但我如何以十六进制格式发送...例如,如果sock.send("")发送字符串。需要发送socket.send(十六进制)???

2 个答案:

答案 0 :(得分:0)

Python有一个内置的十六进制类型。在发送之前,您需要将其序列化为字符串;因为socket.send只接受字符串。

编辑: 重新阅读您的问题后,您似乎没有将接收到的值编码为十六进制类型。话虽如此,如果您在发送数据之前选择序列化数据,则只需在接收端对其进行反序列化。

参考文献:

请参阅Python序列化:https://docs.python.org/2/library/pickle.html

参见Python Hex类型:https://docs.python.org/2/library/functions.html#hex

答案 1 :(得分:0)

认为这已经得到了解答 Pyhton Send receive hex data via tcp socket

您可能希望首先将文本转换为十六进制格式,以便RFID理解:

'01AF23'.decode('hex')