2016-10-03 83 views
1

根據python文檔,python的socket recv()方法返回一個'byte'類型的數組。soc.recv究竟返回什麼?

但是,如果你要打印出此陣,事情並不像字節也會出現:

\xd9\x01\x01\xa4\xe9\xcbV6\x15\xed|>g5\xfa\xbd\xe9Q\[email protected]\x18\xff\ 

是否蟒蛇字節對象有一些內部錯誤報告什麼的?這些字節對象看起來並不是實際返回的字節?

一些更奇怪的例子:

\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

recv劑量確實返回原始字節。只有在打印時,Python字節纔會採用ASCII編碼,如果該值落在可打印ASCII值的範圍內,則會將其打印爲由該8位值表示的ASCII字符。如果不是可打印的ASCII碼,它將通過\x轉義該值並打印十六進制。

請注意,如果您使用的是python 3.5,則可以在上面的字節上調用.hex並查看十六進制值是什麼。這應該確認你正在獲得你期望的值。

隨時通過使用Wireshark或類似軟件驗證您所發送的值是否符合您的期望值,只有在打印中您纔會看到這一點。

+0

因此,字節對象本身(如在,不打印它)將具有適當的值,即使它們不在ASCII編碼內,是正確的嗎? – user1519665

+0

是的,如果該值不是ASCII可打印的,它只是給你十六進制值'\ x'。如果你看到Wireshark之​​類的東西,你會發現這些值是你期望的。這僅僅是python如何打印這些文件的人工產物。 – shuttle87

+0

好吧,非常感謝。希望其餘的邏輯能正常工作! – user1519665