soc.recv究竟回归了什么?

时间:2016-10-03 13:20:18

标签: python arrays sockets python-3.x byte

根据python文档,python的socket recv()方法返回一个'byte'类型的数组。

但是,如果打印出这个数组,那么看起来像字节的东西也会出现:

\xd9\x01\x01\xa4\xe9\xcbV6\x15\xed|>g5\xfa\xbd\xe9Q\x19@i\x18\xff\

python字节对象是否有一些内部错误报告?什么是这些字节对象似乎不是返回的实际字节?

更奇怪的例子:

\x00w\xd4\x04;\x9c\x0b}>P]\xa4\xbd\xa5n:9x\xe3>9\xd2/~8\

\x01\x01\x1b ,Y\x00\x00\x00\x00\x00\xf4

\xa0A\n\xd7tB}\xed,\xc0\x00\

1 个答案:

答案 0 :(得分:1)

recv剂量确实返回原始字节。只有在打印时,Python字节才采用ASCII编码,如果值落在ASCII可打印的值内,它将打印为由该8位值表示的ASCII字符。如果不是ASCII可打印的,它将使用\x转义值并打印十六进制。

请注意,如果您使用的是python 3.5,则可以在上面的字节上调用.hex并查看十六进制值是什么。这应该确认您获得了预期的值。

您可以随意使用Wireshark或类似信息验证您发送的值是否符合预期,只有在打印时才能看到这一点。