2016-06-30 3 views
-1

저는 python에 익숙하지 않지만이 프로젝트를 완료해야합니다. 내가 장치에서 일부 원시 데이터를 얻을 telnetlib를 사용하고,이 데이터가 모습입니다python은 원시 이진 데이터를 float 배열로 변환합니다.

\xc2\xb2\xdd\x0f\xc2\xb2x/\xc2\xb2\x08\xb2M\xcf\xc2\xb2\xc5S\xc2\xb2\xd6[\xc2\xb2qw\xc2\xb1\xafK\xc2\xb1n+\xc2\xb2?\x83\xc2\xb1\xe3\xb7\xc2\xb0\xe8\x87\xc2\xb0\xf1\x8f\xc2\xb1x\xbf\xc2\xb1\xcbO\xc2\xb1\x98\x93\xc2\xb1\xd4\xc3\xc2\xb1\xf7\x9f\xc2\xb1\xb3\x97\xc2\xb1\xe7;\xc2\xb2\x97\xcb\xc2\xb2\xd3\xf3\xc2\xb2f\x8b\xc2\xb1\xc6\xdb\xc2\xb1\xadC\xc2\xb1t\xcf\xc2\xb1\x9c\xdf\xc2\xb1\xb7\x1b\xc2\xb1\xa3\xc2\xb1\t_\xc2\xb1v\xc3\xc2\xb1\xeb

문서 (이, 진짜 약 10 배 더 큰 내가 얻을 출력의 일부) 장치의 말은

raw data: binary. An array of float values in big-endian format (not as a string).

질문은 어떻게이 데이터를 부동 소수점 배열로 변환 할 수 있습니까?

코드 : 내가 파이썬 쉘에서 같은 행동을 할 경우 내가 터미널에서이 스크립트를 실행하면

import telnetlib 
tn = telnetlib.Telnet(hostIP) 
tn.read_until("connected") 
tn.write("getData\r\n") 
data = tn.read_until("\r\n") 
print data 

내가

²\f²▒▒²▒V²▒²▒ 
    ³▒▒³u▒³:v³▒>³;>²W▒²O^²Xf²▒▒±▒▒²P▒²▒j²▒²▒³Pv³▒▒²▒n²:Z²▒±▒F±▒±7▒±@▒±t^±▒▒±▒▒²5:±▒"±▒~±ю±±*±▒°▒▒°{n°a▒°▒:°Q▒°[°cj°0▒¯▒▒¯▒▒r¯ޒ°▒°▒¯▒▒¯a▒¯▒°E▒°▒r°q*¯▒¯▒ 

일부 바이너리 "쓰레기"를 얻을를 얻을 \ XC2 \ XB2 \ xdd \ x0f \ xc2 ... 값

+0

얼마나 많은 수레를 얻는 지 알고 있습니까? 'struct.unpack'은 바이너리 데이터를 값의 튜플로 바꿀 수 있어야합니다. 아마'numpy'로 그것을 할 수있는 방법이있을 것입니다. – Blckknght

+1

여기에 코드를 붙여 넣을 수 있습니까? 그리고 아마도 numpy 또는 pandas를 사용해야합니다. –

+0

@Blckknght 내가 얻는 수레의 수를 모른다. struct.unpack ('d', data)을 시도하면 struct.error가됩니다. unpack에는 길이가 8 인 문자열 인수가 필요합니다. – Stuka

답변

0

미리 배열의 요소 수를 알고 있어야합니다. 또는 어떻게 든 카운트를 추측 할 필요가 있습니다. 즉, 바이트 수를 세고 플로트 크기로 나누면됩니다. 그런 다음 struct 모듈을 사용하여 이진 데이터의 압축을 풉니 다.

if (len(data) % 8) > 0: 
    assert "Data length not a multiple of 8" 
L = [] 
for i in range(0, len(data), 8): 
    L.append(struct.unpack('>d', data[i:i+8])) 
+0

Traceback (가장 최근의 마지막 호출) : File "./telnet.py ", 27 행의 if (data % 8)> 0 : ValueError : 색인에서 283 – Stuka

+0

지원되지 않는 형식 문자 '▒'(0xfffffff2) 나는'len (data) % 8'이어야한다고 확신합니다. . – Blckknght

+0

너 괜찮아! – vz0

관련 문제