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进制不带0x补零,整数转16进制,字符串转16进制的更多相关文章

  1. Java字符串转16 进制工具类Hex.java

    Java字符串转16 进制工具类Hex.java 学习了:https://blog.csdn.net/jia635/article/details/56678086 package com.strin ...

  2. 字节流、字符串、16进制字符串转换__Java(转)

    /** * @Package: * @ClassName:TypeConversion * @Description:字节流.字符串.16进制字符串转换 * @author:xk * @date:Ja ...

  3. JavaScript中字符串与16进制之间的转换

    一.字符串转换为16进制 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  4. Java中字符串转为16进制表示

    Java中字符串转为16进制表示 String str = "鲸"; char[] chars = "0123456789ABCDEF".toCharArray ...

  5. 字节流、字符串、16进制字符串转换__java

    package com.dvn.li.main; /** * @Package: * @ClassName:TypeConversion * @Description:字节流.字符串.16进制字符串转 ...

  6. lua 转换16进制字符串为10进制数值

    lua 转换16进制字符串为10进制数值 > print(tonumber()) 利用tonumber函数,“16”表示“03FFACB”为16进制数.

  7. C# 16进制转字符串,字符串转16进制

    { //========================================================== //16进制转字符串 public static byte[] HexTo ...

  8. strtol函数 将字符串转换为相应进制的整数

    转自http://hi.baidu.com/qwpsmile/blog/item/9bc44efa4f41018a9f514637.html +----------------+|      strt ...

  9. python-字符编码、字符串格式化、进制转化、数据类型、列表、元组、字典总结

    目录: 一.字符编码 二.字符串格式化 三.进制转换 四.数据类型及其操作 五.字符串转换 六.列表 七.元组 八.字典 一.字符编码: 计算机由美国人发明,最早的字符编码为ASCII,只规定了英文字 ...

随机推荐

  1. 去除npm run dev日志warn记录

    目录 一 babel的一些eslint方法废除了 问题 解决方案 相关文档 二 webpack的loaderUtils.parseQuery()被废弃了 问题 解决方案 相关文档 三 postcss相 ...

  2. 2018HDU多校训练-3-Problem M. Walking Plan

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=6331 Walking Plan  Problem Description There are n inte ...

  3. 5分钟教你看大神操作keepalived服务

    第11章 高可用服务(keepalived)的配置 11.1 高可用服务的概念 11.1.1 高可用服务总体概念 为了解决单点故障 减轻服务器的压力 11.1.2 高可用keepalived的概念 为 ...

  4. JavaEE基础(05):过滤器、监听器、拦截器,应用详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.Listener监听器 1.概念简介 JavaWeb三大组件:Servlet,Listener,Filter.监听器就是指在应用程序中监听 ...

  5. 【Java Web开发学习】Spring MVC 使用HTTP信息转换器

    [Java Web开发学习]Spring MVC 使用HTTP信息转换器 转载:https://www.cnblogs.com/yangchongxing/p/10186429.html @Respo ...

  6. 14个Java并发容器,你用过几个?

    作者:acupt 前言 不考虑多线程并发的情况下,容器类一般使用ArrayList.HashMap等线程不安全的类,效率更高.在并发场景下,常会用到ConcurrentHashMap.ArrayBlo ...

  7. python基础入门 整型 bool 字符串

    整型,bool值,字符串 一.整型 整型十进制和二进制 整型:整型在Python中的关键字用int来表示; 整型在计算机中是用于计算和比较的 可进行+ - * / % //(整除) **(幂运算) 十 ...

  8. pipelineDB学习笔记-2. Stream (流)

    一.流的定义: 所谓的“流”(stream)在pipelineDB中是指那些被允许的数据库客服端推送到 Continuous View(连续视图) 的时序化数据的一种“抽象”.流中的每一个raw(数据 ...

  9. 原创 Hive left join 技巧总结

    根据工作中经验总结出来   left  join  常用的  使用注意点:    A     Left    join   B    on   A.id =  B.id 第一种情况: 如果 A 表  ...

  10. NLP(十八)利用ALBERT提升模型预测速度的一次尝试

    前沿   在文章NLP(十七)利用tensorflow-serving部署kashgari模型中,笔者介绍了如何利用tensorflow-serving部署来部署深度模型模型,在那篇文章中,笔者利用k ...