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

如何使用Python2.7提取並打印確切的MAC地址? 在.proto消息中,mac_address被定義爲 「可選字節mac」。如何在解碼Python中的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

不是這樣的。我的意思是我作爲一些變量作爲字符串和一些mac收到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 

如果你只是想整數列表做:

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' 

基本上,這條線將十六進制字符串轉換爲0到255範圍整數的列表,然後將每個元素c轉換回沒有'\ x'字符的十六進制字符串,然後將列表元素作爲字符串與中間的':'連接。

+0

是不是有解碼這個字符串的方法? – user7375520

+0

你也可以做'r'\ xd0 \ xbf \ x9c \ xd8 \ xf0 \ x00'.replace(r'\ x','',1).replace(r'\ x',':')'更清潔 –

+0

我不認爲有這樣的直接類型鑄造方法。也許你可以用正則表達式獲得更漂亮的結果。 –

相關問題