2013-10-15 4 views
1

TCP 소켓으로 작업 중이며 장치에서 이진 패킷을 수신 중입니다. 또한 이진 스트림을 16 진수 문자열로 변환하는 데 사용하는 HexToBinary라는 모듈을 사용하고 있습니다. 이런 식으로 뭔가 :하나의 긴 문자열에서 목록 만들기

data = self.csocket.recv(560) 
convdata = HexToBinary.ByteToHex(data) 

내가 같은 될 것이라고보고 싶어 내가 문자열을 얻을 convdata 인쇄하는 경우 : "00 00 00 00 00 08 03 01 01 00 00"

을 내가 것 내가 목록 명령을 사용하여 패킷을 수정하고 새 패킷을 만들 수 있도록 목록의 요소로 각 바이트 목록을 만드는 것입니다. 나는 이것을 프로그램 적으로하는 방법을 알 수 없었다.

도움 주셔서 감사합니다. 당신은 중간 convdata이 필요하지 않습니다)

+2

어떤 언어로 제공됩니까? – SLaks

+1

파이썬처럼 보입니다 :) – Ashalynd

+0

죄송합니다, 예 Python 3.2.2 –

답변

0

실제 바이트는 b''.join(convdata.split()).decode('hex') 있습니다. 이 결과는 bytes 객체입니다. Python 2에서는 문자열이지만 파이썬 3에서는 유니 코드 문자열과 구별됩니다.

1

l = [int(x, 16) for x in convdata.split()]

언어가 파이썬이라고 가정. 당신은 INT의 목록을 원하는 경우

l = list(data) 

: 당신은 바이트의 목록을 원하는 경우

l = [ord(x) for x in data] 
0

을,

+0

그래서 l = list (data) 설정은 작동하지만 다음과 같이 형식이없는 답장이 표시됩니다 : [ '\ x00', '\ x00', '\ x00', '\ x00', '\ x00', '\ n', '\ xff', '\ xfe', '\ xb0', '\ xee', 'E', 'h' xe0 ','\ x00 ','\ x00 ']. 이상적으로는 0000 00 00 00 ff fe b0 ee ac e0 00 00을 읽길 원합니다.이 작업은 join 명령으로 수행 할 수 있다고 생각하지만이 작업을 수행하는 방법을 모르겠습니다. –

관련 문제