2010-08-08 5 views
1

big-endian 2 바이트 문자열을 숫자 포트 번호로 변환하려고합니다. 나는 이미 몇 가지 코드를 가지고 있지만, 그것은 바로 내가 만약 아무 생각이 없다 :빅 엔디안 인코딩 된 포트 번호 포장 풀기

from struct import unpack 
def unpack_port(big_endian-port): 
    return unpack("!H", big_endian-port)[0] 

포트가 (파이썬에 repr()를 사용하여) \ X1A의 \의 XE1이며, 그 기능에서 6881를 얻을.

맞습니까?

+0

"양식 '!' 네트워크 바이트 순서가 빅 엔디안 (big-endian) 또는 리틀 엔디안 (little-endian)인지 여부를 기억하지 못하는 가난한 영혼을 위해 사용할 수 있습니다. " - 약간의 [struct documentation] (http://docs.python.org/library/struct.html) 유머. :) – Seth

답변

3

예 '!'은'네트워크 바이트 순서 '라고하는 문자이고 'H'은 '16 비트 부호없는 정수'라고 표시되어 있으므로 코드가 정확합니다. 6881은 일반적으로 Bittorrent 포트입니다.

이 경우에는 '!'이 정확한 문자라고 생각합니다. 포트 번호이므로 네트워크에서 데이터가 전송 될 것으로 기대됩니다. 그러나 다른 이유로 인해 빅 엔디안 인 데이터가 있다면 '>'이 더 적절할 수 있습니다. 그들은 똑같은 것을 의미하고 항상 것입니다. 어떤 의미 론적 차이보다 의도를 나타 내기 위해 코드를 주석 처리하는 것이 더 중요합니다.

+0

감사합니다. 형식화 플래그가 맞는지 확실하지 않았습니다. –