2013-04-05 4 views
1

나는 위치 이진 포맷이다파이썬을 풀고 이진 데이터

그러나 "회계 - 요청"패킷으로부터 위치를 잡고 반경위한 rlm_python 모듈

"\001\027\002\025\001+\001\024" 

쓰고 구조체 사용

[[email protected] ~]# python 
Python 2.4.3 (#1, May 5 2011, 16:39:10) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from struct import * 
>>> unpack('hhl',"\001\027\002\025\001+\001\024") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in ? 
struct.error: unpack str size does not match format 

이 데이터를 어떻게 풀 수 있습니까?

+1

바이너리 데이터가 아닌 * 8 진수 *가 있습니다. –

+0

이것을 어떻게 변환 할 수 있습니까? – krisdigitx

+0

'calcsize ('l')','calcsize ('= l')','calcsize ('i')'등 ('calcsize'는'struct.calcsize'입니다)을 비교하십시오. –

답변

0

문자열의 길이는 8 바이트이지만 unpack은 예상하지 못할 수도 있습니다 (크기는 수정자를 사용하지 않는 한 플랫폼에 따라 다릅니다). struct.unpack docs에서

Python 2.4.3 (#1, May 5 2011, 16:39:10) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from struct import * 
>>> unpack('hhl',"\001\027\002\025\001+\001\024") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in ? 
struct.error: unpack str size does not match format 
>>> unpack('=hhl',"\001\027\002\025\001+\001\024") 
(5889, 5378, 335620865) 

:

첫 번째 문자가 여기에 해당하지 않는 경우는, '@'가정한다. 네이티브 크기와 정렬은 C 컴파일러의 sizeof 표현식을 사용하여 결정됩니다. 이것은 항상 기본 바이트 순서와 결합됩니다. 표준 크기는 형식 문자에만 의존합니다. 서식 문자 섹션의 표를 참조하십시오.

+0

두뇌 감사합니다, 감사합니다, 사실이 위치/데이터 DHCP 필드에서 option82에서오고있다, 그래서 나는 그것이 문자열이되기를 바랐다 ... – krisdigitx

0
>>> import struct 
>>> data = "\001\027\002\025\001+\001\024" 
>>> data 
'\x01\x17\x02\x15\x01+\x01\x14' 
>>> len(data) 
8 
>>> struct.calcsize('hhl') 
16 
>>> struct.calcsize('!hhl') 
8 
>>> struct.unpack('!hhl',data) 
(279, 533, 19595540) 

아키텍처에 따라 생성자를 수정하지 않으면 일부 요소의 크기가 변경 될 수 있습니다.