Python輸出16進制不帶0x補零,整數轉16進制,字符串轉16進制

Python輸出16進制不帶0x補零,整數轉16進制,字符串轉16進制

  在開發中,咱們偶爾會遇到須要將數據經過控制檯打印出來,以檢查數據傳輸的準確性。例如調試服務端剛接到的二進制數據(裏面包含不少非可見字符,也就是ASCii碼以外的字節值,或是字節值不是字母和數字的,是一些特殊符號),如物聯網的MQTT協議的信息,以及咱們自定義的二進制應用協議,而不是基於可見字符或JSON組裝的信息流。但咱們但願看到的是相似這樣的信息「0A 53 49 B7 FC 2E」。python

  這些二進制數據若是直接用print()函數打印,則在控制檯看到的是以字節值表明的字符形式,看到的不少就是亂碼。若是用Python裏的hex()函數轉一下再依次輸出,會在每一個前面都帶有「0x」字符,而且01會打印成1,看起來就很不整齊,感受比較亂,而且打印的時候要人爲在每一個字節後面加入空格才能分開字節。網絡

  通過實踐,咱們能夠經過格式化輸出將字節值變成16進制字符後,再用join()函數輸出,就能夠實現咱們要的效果了,想打印字符串的ASCii值也能夠,只不過先用ord()函數轉一下,下面是我封裝的兩個函數,分別對應字節類型和字符串類型的輸出,調試經過,僅供參考。函數

打印字節類型的:測試

# 字節列表以16進制格式打印數據
def print_bytes_hex(data):
    lin = ['%02X' % i for i in data]
    print(" ".join(lin))

# 測試字節列表,這也是網絡傳輸收到的原始類型
arr = [0x4B, 0x43, 0x09, 0xA1, 0x01, 0x02, 0xAB, 0x4A, 0x43]
print_bytes_hex(arr)

'''
控制檯輸出:
4B 43 09 A1 01 02 AB 4A 43
'''

打印字符串類型的:調試

# 字符串或字符列表以16進制格式打印數據
def print_string_hex(data):
    lin = ['%02X' % ord(i) for i in data]
    print(" ".join(lin))

# 測試字符串類型
arr = 'Work'
print_string_hex(arr)

'''
控制檯輸出:
57 6F 72 6B
'''

  若是咱們是開發物聯網的項目,涉及到信令須要與硬件開發人員交流的時候,硬件那邊基本都是以16進制描述的,因此在服務端輸出格式統一的數據流格式,方便你們交流。code

  上面的實現也能夠用循環打印(在打印的時候格式化和加空格)實現,可是寫起來略顯臃腫,可是不用生成新的列表,對瞬間內存佔用有利(抱歉,寫硬件代碼留下的習慣,老是會想到內存佔用,由於單片機的資源實在有限)你們能夠根據這個本身改進。內存

相關文章
相關標籤/搜索