【问题标题】:sending hex value over udp通过 udp 发送十六进制值
【发布时间】:2017-09-25 04:35:59
【问题描述】:

我在 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)

有人可以帮我修一下吗。

【问题讨论】:

    标签: python sockets udp


    【解决方案1】:

    socket相关代码无关,复制问题只需要这个:

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

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

    bytes(int) -> 参数给定大小的字节对象初始化 带有空字节

    您可以在这里使用struct 模块提供帮助:

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

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

    【讨论】:

    • 感谢您的快速回复。我现在明白了这个错误。您能否建议我如何将十六进制数转换为字节,以便可以通过 UDP 发送。
    • @AmitChouksey:你可以struct.pack()。请参阅我的更新答案。
    猜你喜欢
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 2017-03-26
    • 2015-07-25
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多