python - 将不可打印的字节转换为字符串
问题描述
我有一个要转换为对象的 python3bytes
对象(使用struct.pack
or生成) 。注意 using在这里不起作用,因为它会拒绝转换不可打印的字符。to_bytes
str
bytes.encode("ascii")
我怎样才能做到这一点?
我正在尝试将整数转换为str
对象中的二进制表示形式,以便11
将其表示为"\x00\x00\x00\x0b"
(注意这是一个str
对象而不是bytes
)。
我目前正在做的事情适用于不具有0x80
或以上字节的较低整数:
In [94]: i = 11
In [95]: i.to_bytes(2, 'big')
Out[95]: b'\x00\x0b'
In [96]: i.to_bytes(2, 'big').decode('ascii')
Out[96]: '\x00\x0b'
但是,对于将使用字节的 MSbit 表示的整数,它会中断:
In [97]: i = 250
In [98]: i.to_bytes(2, 'big')
Out[98]: b'\x00\xfa'
In [99]: i.to_bytes(2, 'big').decode('ascii')
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-100-d5fe6014b48a> in <module>
----> 1 i.to_bytes(2, 'big').decode('ascii')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xfa in position 1: ordinal not in range(128)
我怎样才能转换i = 250
为"\x00\xfa"
?
谢谢!
附言
这样做的原因是我要调用的函数需要一个str
对象而不是一个bytes
对象,我理解这不是 pyton3str
对象的预期目标(并且欣赏和之间的分离str
)bytes
,但这仍然是我希望在这里完成的.
解决方案
如何格式化字节的字符串表示(不解码字符!)?
import struct
i = 250
s = str(struct.pack('>H', i)).replace('b', '').replace("'", "")
print(s)
>>> \x00\xfa
推荐阅读
- c# - 从集合中获取最接近 TimeOfDay 的时间跨度
- javascript - 带有状态的 ifElse 语句?
- android - 如何使用可绘制的形状制作如下图所示的形状?
- docusignapi - DocuSign Rest API 替换单个模板文档
- scala - spark scala中数据框列与其数组之间的总和不同
- java - 从 Web 逻辑服务器发布的重复肥皂请求以响应接收超时
- php - 找出两个表之间的差异
- swift - 结合 flatMap/Scan 携带中间结果
- regex - 在 spark 数据框中为包含 , 的列名加上引号
- python - RuntimeError:无法使用 ThreadPool 启动新线程并且只有少数线程