我在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)
有人可以帮我修理它。
答案 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文档。