我目前正在尝试将字节串的元素移位后以十六进制格式打印,如下所示:
Python 3.6.10 (default, May 12 2020, 10:44:31)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> x = '\x40\x11\xb8'
>>> type(x)
<class 'str'>
>>> print(r'\x{:x}'.format(ord(x[2])-11))
\xad
>>> quit()
在解释器中,这很好用,但是当我尝试将字符串作为参数传递时,它将最后一个值解释为比字节字符串更长的值,可能是utf-8:
cat test.py
#!/usr/bin/env python
import sys
print(type(sys.argv[1]))
print(r'\x{:x}'.format(ord(sys.argv[1][2])-11))
./test.py $'\x40\x11\xb8'
<class 'str'>
\xdcad
问题是:有没有办法防止这种情况发生?
我也尝试过将sys.argv [1]映射到字节数组,但是由于它超出了sys.argv [1] [2]中的255个限制,因此不起作用。