python 16进制补零_Python输出16进制不带0x补零,整数转16进制,字符串转16进制
python輸出16進制不帶0x補零,整數轉16進制,字符串轉16進制
在開發中,我們偶爾會遇到需要將數據通過控制臺打印出來,以檢查數據傳輸的準確性。例如調試服務端剛接到的二進制數據(里面包含很多非可見字符,也就是ascii碼之外的字節值,或是字節值不是字母和數字的,是一些特殊符號),如物聯網的mqtt協議的信息,以及我們自定義的二進制應用協議,而不是基于可見字符或json組裝的信息流。但我們希望看到的是類似這樣的信息“0a 53 49 b7 fc 2e”。
這些二進制數據如果直接用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進制描述的,所以在服務端輸出格式統一的數據流格式,方便大家交流。
上面的實現也可以用循環打印(在打印的時候格式化和加空格)實現,但是寫起來略顯臃腫,但是不用生成新的列表,對瞬間內存占用有利(抱歉,寫硬件代碼留下的習慣,總是會想到內存占用,因為單片機的資源實在有限)大家可以根據這個自己改進。
希望與廣大網友互動??
點此進行留言吧!
總結
以上是生活随笔為你收集整理的python 16进制补零_Python输出16进制不带0x补零,整数转16进制,字符串转16进制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黑枸杞的作用
- 下一篇: 槐耳颗粒的功效与作用