2017-05-06 1 views
0
(Pdb) p mac 
'\xd0\xbf\x9c\xd8\xf0\x00' 
p type(mac) 
<type 'str'> 

정확한 파이어 와이어 주소를 추출하고 인쇄하려면 어떻게해야합니까? .proto 메시지에서 mac_address는 "optional bytes mac"으로 정의됩니다.파이썬에서 protobuf를 디코딩하는 동안 올바른 값을 추출하고 출력하는 방법

+0

디코드하고 내용을 볼 수있는 방법이 없습니까? 왜 사람들은 문자열 포맷팅을 할 것인가. 내가 찾고있는 것이 아닙니다. – user7375520

+0

'디코드'는 여러 가지 의미가 있기 때문에 원하는 결과가 어떻게 보이는지 보여 줄 수 있습니다. – PaulMcG

답변

0
import struct 
a='\xd0\xbf\x9c\xd8\xf0\x00' 
for i in range(6): 
    print hex(struct.unpack("B", a[i])[0])[2:], ":", 

인쇄

아마도
d0 : bf : 9c : d8 : f0 : 0 : 
+0

싫어함. 내 말은 문자열과 일부 맥에서 어떤 변수로받은 protobuf를 의미한다. 내가 인쇄 할 때 .proto에 int로 정의 된 모든 변수는 유형이 바이트 인 경우를 제외하고 문자열이 잘 전달된다. 거기에 더 일반적인 방법으로 표시되지 않습니다. – user7375520

0

이?

>>> mac_str = ':'.join("{:02x}".format(ord(c)) for c in mac) 
>>> print(mac_str) 
d0:bf:9c:d8:f0:00 

그냥 int 치의 목록을 원하는 경우

는 수행

mac_decoded = [ord(c) for c in mac] 

회원님이 '해독'을 의미하는 다른 무엇인지 ...

+0

이 문자열을 디코딩 할 방법이 없습니까? – user7375520

0
':'.join([hex(c)[2:] for c in map(ord,'\xd0\xbf\x9c\xd8\xf0\x00')]) 

인쇄 :

'd0:bf:9c:d8:f0:0' 

기본적으로이 줄은 16 진수 문자열을 0 ~ 255 범위 int의 목록을 가져온 다음 각 요소 c를 '\ x'문자가없는 16 진수 문자열로 다시 변환 한 다음 목록 요소를 사이에 ':'가있는 문자열로 결합합니다.

+0

이 문자열을 디코딩 할 방법이 없습니까? – user7375520

+0

또한 'r'\ xd0 \ xbf \ x9c \ xd8 \ xf0 \ x00'.replace (r '\ x', '', 1) .replace (r '\ x', ':')'할 수 있습니다 훨씬 더 깨끗합니다. –

+0

직접 형 식 접근 방식이 있다고 생각하지 않습니다. 어쩌면 당신은 정규식으로 더 예쁜 결과를 얻을 수 있습니다. –

관련 문제