如何从 python 中的用户读取字节
How to read bytes from user in python
我可以知道如何使用命令行从最终用户读取字节吗?
我试过
a = input("Enter your bytes data\n")
但那是读取字符串。
我正在使用 python 2 版本。
请告诉我怎么做?
在 Python 2 中,字符串 是 字节序列,因为 Python 2 字符串对象大致等同于 Python 3 bytes
个对象。
在 Python 3 中,您将使用 b'AB\xE2'
作为由 3 个字节 0x41 0x42 0xE2
组成的 bytes
对象。这也适用于 Python 2(有或没有 b
——它被反向移植到 Python 2),尽管 Python 2 的结果是 str
对象。
用户可以直接在 Python 2:
中输入此类文字
a = input("Enter your bytes data\n")
从用户的角度来看会是这样的:
Enter your bytes data
b'AB\xe2'
在此交互之后,a
将是包含这些字节的长度字符串(即 `a = 'AB\xE2')。
在上面,重要的是用户实际输入引号以获得有效的文字。不用说,这可能很麻烦,而且有点容易出错。此外,完全使用 input
可以说是次优的,因为它在某种意义上被贬值了。 Python 3 放弃了它,取而代之的是 raw_input()
(他们将其重新命名为 input()
有点令人困惑)。将用户的输入作为字符串抓取然后明确地进行任何需要的转换往往更安全。
作为替代方案,您可以使用 raw_input
创建一个自定义输入函数,该函数旨在采用 space 分隔的十六进制数字,每个代表 1 个字节(类似于十六进制的典型输出 -倾倒)。类似于:
def get_bytes(prompt):
hexes = raw_input(prompt).split()
return ''.join(chr(int(h,16)) for h in hexes)
例如,如果您 运行
a = get_bytes("enter binary in space-delimited hex: ")
用户输入如下:
enter binary in space-delimited hex: 41 42 e2
之后 a
是与之前相同的字节串。
我可以知道如何使用命令行从最终用户读取字节吗?
我试过
a = input("Enter your bytes data\n")
但那是读取字符串。 我正在使用 python 2 版本。
请告诉我怎么做?
在 Python 2 中,字符串 是 字节序列,因为 Python 2 字符串对象大致等同于 Python 3 bytes
个对象。
在 Python 3 中,您将使用 b'AB\xE2'
作为由 3 个字节 0x41 0x42 0xE2
组成的 bytes
对象。这也适用于 Python 2(有或没有 b
——它被反向移植到 Python 2),尽管 Python 2 的结果是 str
对象。
用户可以直接在 Python 2:
中输入此类文字a = input("Enter your bytes data\n")
从用户的角度来看会是这样的:
Enter your bytes data
b'AB\xe2'
在此交互之后,a
将是包含这些字节的长度字符串(即 `a = 'AB\xE2')。
在上面,重要的是用户实际输入引号以获得有效的文字。不用说,这可能很麻烦,而且有点容易出错。此外,完全使用 input
可以说是次优的,因为它在某种意义上被贬值了。 Python 3 放弃了它,取而代之的是 raw_input()
(他们将其重新命名为 input()
有点令人困惑)。将用户的输入作为字符串抓取然后明确地进行任何需要的转换往往更安全。
作为替代方案,您可以使用 raw_input
创建一个自定义输入函数,该函数旨在采用 space 分隔的十六进制数字,每个代表 1 个字节(类似于十六进制的典型输出 -倾倒)。类似于:
def get_bytes(prompt):
hexes = raw_input(prompt).split()
return ''.join(chr(int(h,16)) for h in hexes)
例如,如果您 运行
a = get_bytes("enter binary in space-delimited hex: ")
用户输入如下:
enter binary in space-delimited hex: 41 42 e2
之后 a
是与之前相同的字节串。