2013-04-19 1 views
0

메시지는 COM 포트에 잘 작동하는 ser.write('\x01\x03\x01') 형식으로 메시지를 보내고 있습니다. 나는 다음과 같은 일을하는 함수 만들기 위해 노력 :파이썬에서 직렬 통신을 위해 16 진수 문자열을 병합하십시오.

def func(inp):
# transport inp to hex format and to be like \xXY (two digits)
# merge in the way '\x01'+'\xXY'+'\x01'

을하지만 난 항상 하나 백 슬래시를 삽입하는 문제가 (그것은 이중 백 슬래시처럼 삽입 할 수 있지만 다음 포트로 읽을 수 없습니다 하나 하나) 또는이 역 슬래시를 해석기로 읽는 것 (오류를 준다).
누군가 이미 해본 적이 있다면 도와주세요!

답변

0

당신은 16 진수 문자열을 변환 할 binascii.unhexlify을 사용할 수 있습니다

>>> import binascii 
>>> binascii.unhexlify('010203') == '\x01\x02\x03' 
True 

그래서 당신의 기능이 파이썬의 struct module가 정확히 무엇

def func(inp): 
    return '\x01' + binascii.unhexlify(inp) + '\x01'; 
+0

감사합니다. 이제 사용할 솔루션을 제공하는 방법을 모르겠습니다. – user2299993

0

입니다. 함수처럼 쓸 수 있습니다 :

import struct 

>>> def func(inp): 
...  return struct.pack('bbb', 1, inp, 1) 
... 
... 
>>> func(22) 
'\x01\x16\x01' 

'b' 형식 문자 부호 문자로 바이트 값을 해석 'B' 그들에게로 서명되지 않은 문자를 해석합니다.

+0

감사합니다! 10을 넣으면 (0A를 얻기 위해) 함수는 그것을 \ n으로 해석합니다. 포트가이 방법으로 메시지를 인식한다면 우연히 알고 있습니까? (지금 내 이사회가 없습니다) – user2299993

+0

예, 올바른 동작이어야합니다. 해당 바이트의 다른 인쇄 가능한 표현이 없기 때문에 \ 01처럼 보이고 있습니다. 0x0A의 인쇄 가능 표현은 '\ n'개행입니다. – bgporter

관련 문제