2016-10-03 6 views
1

python 설명서에 따르면 python의 소켓 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 용량이 실제로 원시 바이트를 반환합니다. 파이썬 바이트가 ASCII 인코딩으로 가정하는 것은 인쇄에서뿐입니다. 값이 ASCII 인쇄 가능 값 내에 있으면 해당 8 비트 값이 나타내는 ASCII 문자로 인쇄합니다. ASCII 인쇄 가능하지 않으면 \x 값을 이스케이프하고 16 진수를 인쇄합니다.

파이썬 3.5를 사용하는 경우 위의 바이트에 .hex을 호출하여 16 진수 값을 확인할 수 있습니다. 이것은 당신이 기대하는 가치를 얻고 있음을 확인 시켜줄 것입니다.

보내시는 값이 Wireshark 또는 이와 유사한 것을 사용하여 예상 한 값인지 확인해보십시오. 인쇄 할 때만 볼 수 있습니다.

+0

그래서 바이트 객체 자체는 ASCII 인코딩 내에 있지 않더라도 올바른 값을 갖습니다. 맞습니까? – user1519665

+0

예, 값을 ASCII로 인쇄 할 수없는 경우 16 진수 값 '\ x' 만 제공합니다. Wireshark와 같은 와이어에서 실제로 무엇이 연결되는지 보려면 값이 예상 한 값인지 확인하십시오. 이것은 파이썬이 이들을 인쇄하는 방법의 인공물 일뿐입니다. – shuttle87

+0

알았어, 고마워. 바라건대 나머지 논리가 제대로 작동 할 것입니다! – user1519665

관련 문제