通过udp发送十六进制值

时间:2017-09-25 04:36:00

标签: python sockets udp

我在python 3中编写了一小段代码,用于发送一个变量的值,该变量在UDP上以十六进制表示,但结果是" MemoryError"

这是代码

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

server_address = ('localhost', 10000)
message = 0xf1a525da11f6
sent = sock.sendto(bytes(message), server_address)

有人可以帮我修理它。

1 个答案:

答案 0 :(得分:1)

与套接字相关的代码无关紧要,只需要这样就可以复制问题:

>>> bytes(0xf1a525da11f6)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
MemoryError

MemoryError的原因是要求Python创建大小为0xf1a525da11f6的bytes对象。来自文档:

  

bytes(int) - &gt;由初始化参数给出的大小的字节对象   使用空字节

您可以使用struct模块来提供帮助:

import struct

>>> struct.pack('!q', 0xf1a525da11f6)
b'\x00\x00\xf1\xa5%\xda\x11\xf6'

格式字符串'!q'以网络字节顺序('q')指定带符号的8字节值('!')。有关详细信息,请参阅format string文档。