十六进制字节零不为零

时间:2016-02-22 00:13:35

标签: python byte

作为对我的意思的简单演示,subprocess.communicate()的{​​{1}}始终是stdout字符串。

可是:

bytes

此外,如果我关注Convert bytes to a Python string

>>> assert stdout == bytes('{}'.format(stdin), "utf-8"), \
        "{} != {}".format(stdout, stdin)
AssertionError: b'\x00' != b'0'

它正在尝试转换和比较字节字符串,但我无法弄清楚如何

  1. 将它们转换为正确的字节

  2. 使字符串看起来相同

  3. 在这种情况下,我碰巧可以灵活地阅读单数字符的>>> assert \ stdout.decode("utf-8") == \ bytes('{}'.format(stdin), "utf-8").decode("utf-8"), \ "{} != {}".format(stdout, stdin) AssertionError: b'\x00' != b'0' 并将ordint:0进行比较。还有什么可以解决这个问题?

1 个答案:

答案 0 :(得分:3)

您的第二个字节字符串b'0'b'\x00'的字符串确实不同。前者是字符 0,它是ASCII码点0x30。你会注意到:

>>> b'0' == b'\x30'
True

b'\x00'代表NUL character

请参阅Binary Sequence TypesString and Bytes literals规范,其中介绍了b''语法:

  

字节文字中只允许使用ASCII字符(无论声明的源代码编码如何)。必须使用适当的转义序列将超过127的任何二进制值输入到字节文字中。