【问题标题】:How can I overcome Python max byte range如何克服 Python 最大字节范围
【发布时间】:2021-12-24 05:44:57
【问题描述】:

我在将字节数组发送到套接字时遇到问题。我正在尝试登录游戏服务器,我需要使用字节指定游戏版本。这就是我所拥有的:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.ioctl(socket.SIO_KEEPALIVE_VALS, (1, 10000, 10000))
s.connect(("127.0.0.1", 25565))

handshake = bytearray([6,0,340,0,0,69,2]) #2nd index specifies the game version (340)
s.send(handshake)
#[...]

问题是我得到了这个错误:

Traceback (most recent call last):
  File "c:\Users\Leon\Desktop\mc\mc_protocol.py", line 11, in <module>
    handshake = bytearray([6,0,340,0,0,69,2])
ValueError: byte must be in range(0, 256)

那么有没有办法将字节发送到高于 256 的套接字?谢谢。

【问题讨论】:

  • 一个“字节”是一个介于 0 和 255 之间的整数。如果您需要发送一个整数,那么您需要知道服务器希望如何接收它。例如,它可能是一个 16 位整数(即 2 个字节)或一个 32 位整数(4 个字节),或者完全是其他的东西。
  • 这不是 Python 的限制,这是由于一个字节只包含 8 位。

标签: python arrays sockets byte


【解决方案1】:

一个字节最多只能达到 255 - 8 个二进制数字可以从 00000000 到 11111111。如果您认为需要将数字 340 - 二进制 101010100 - 放在一个字节中,那么我不知道该告诉你什么。它不适合。这就像在问如何将数字 567 写成 2 位数字。

如果您确定 340 是正确的数字,则可能需要将其拆分为两个字节:101010100 -> 1 01010100 -> 00000001 01010100 或可能是 01010100 00000001。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-30
    • 2017-12-13
    • 2014-03-13
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    相关资源
    最近更新 更多