使用Python 3,如何写入()高位为1的8位无符号整数,为1个字节?

时间:2017-10-01 04:27:11

标签: python

我正在使用python3。我希望将write()所有8位无符号整数作为子进程的1个字节 - 让我告诉你我的意思:

>>> p = subprocess.Popen(["./some_program"], stdin=subprocess.PIPE)
>>> x=0x80
>>> p.stdin.write(str.encode(chr(x)))
2

这不好,我想输出1个字节,而不是2.我想这是因为默认编码是utf-8。好的,我试试

>>> p.stdin.write(str.encode(chr(x), "ascii"))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character '\x80' in position 0: ordinal not in range(128)

当然,也没有好处。

我在p.stdin之后放置什么才能向子进程发送1个字节,对于从'\x00''\xff'的所有无符号整数,正好是1个字节,比如8个整数的位表示?

1 个答案:

答案 0 :(得分:1)

您可以使用:

p = subprocess.Popen(["cat"], stdin=subprocess.PIPE)
x = 0x80
p.stdin.write(bytearray.fromhex(format(x, 'x')))

一种更好的避免双重转换的方法是:

p = subprocess.Popen(["cat"], stdin=subprocess.PIPE)
x = [ 0x80 ]
p.stdin.write(bytearray(x))