最简洁,Pythonic方式在Python 3中将空字节表示为二进制(字节)字符串

时间:2015-08-09 14:12:20

标签: python-3.x

我需要在字节字符串中添加一些填充。这就是我想出的:

if padding_len > 0:
    data += bytes.fromhex('00') * padding_len

在Python 3中表示空字节的方法是否比bytes.fromhex('00')更好?

1 个答案:

答案 0 :(得分:3)

>>> bytes.fromhex('00') == b'\x00'
True
>>> b'\x00' * 10
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

编辑:

正如霍布斯在下面的评论中指出的那样,当然可以使用b'\0'而不是b'\x00',正如j-f-sebastian指出的那样,在这种情况下并不会混淆。

但无论如何我不会这样做。它肯定在这个上下文中 (如果这很重要的话,它会为你节省两个字符)。它甚至可以在最常见的其他上下文中工作,在这种情况下,您要为C构建字符串并在结尾处放置一个空字节。

但在最常见的情况下,它可能会导致混淆,因为编译器对b'\0'的解释是高度依赖数据。换句话说,它会根据零之后的变化而变化。

>>> b'\0ABC' == b'\00ABC'
True
>>> b'\0ABC' == b'\000ABC'
True
>>> b'\0ABC' == '\0000ABC'
False

如果您在深夜调试时并非所有脑细胞都正常运作,那么因为您更换了字符串中的字符而使字符串的长度发生变化非常令人沮丧。要避免这种情况,你所要做的就是总是使用两个额外的字符。使用\x00(十六进制)还是\000八进制无关紧要 - 无论后续字符的值如何,这两种方法都能正常工作。