首页 > 编程知识 正文

python将16进制转为有符号,python将整数转化为十六进制

时间:2023-05-06 07:02:26 阅读:169797 作者:1347

在开发过程中,可能需要从控制台打印数据以检查数据传输的准确性。 例如,调试服务端刚接收到的二进制数据(包含较多的非可视字符,即ASCii码以外的字节值,或者字节值不是字符或数字而是特殊的符号)、物联网的MQTT协议的信息、可视字符或JSON 但是,我们想看的是这样的信息“0A 53 49 B7 FC 2E”。

如果直接使用print ()函数打印这些二进制数据,则控制台将显示由python基础教程中的字节值表示的字符形状,从而出现大量乱码。 Python的hex ) )函数进行旋转,然后依次输出,每个前面都会附有“0x”的文字。 另外,01被打印为1,看起来不整齐混乱。 另外,打印时必须在各字节的后面加入空格才能分开字节。

在实践中,将输出格式化,使字节值成为十六进制字符,然后用join (函数输出,可以得到我们想要的效果。 如果想打印字符串的ASCii值也可以。 但是,请先用ord )函数回答一下。 以下是我封装的两个函数,分别对应字节型和字符串型的输出。 调试通过。 仅供参考。

字节类型的#字节列表打印数据defprint_bytes_hex(data ) :

lin=['X' % i for i in data]

print('.join ) (Lin ) )测试字节的列表,这也是在网络传输中接收的原始类型arr=[0x4B,0x 43,0x 09,0x a1,0x 01,0 x02,0x ab,0x4a ]

print_bytes_hex(ARR ) '''

控制台输出:

4B 43 09 A1 01 02 AB 4A 43

“”'

以十六进制格式打印用于打印字符串类型#字符串或字符列表的数据defprint_string_hex(data ) :

Lin=['x'%ord(I ) for i in data]

print('.join(Lin ) )测试字符串类型arr='work'print_string_hex (' ' ) )。

控制台输出:

57 6F 72 6B

“”'

当我们在开发物联网的项目中,需要与信令相关的硬件开发者进行交流时,由于硬件端基本上采用十六进制描述,在服务端输出格式为统一的数据流格式,便于大家进行交流。

上述实现也可以通过循环打印(打印时加入格式和空格)来实现,但是写起来会稍微变大,但由于不需要生成新的列表,所以有利于瞬间的内存占用。 (对不起,写硬件代码的习惯总是考虑内存占用。 单片机的资源真的很有限,大家可以在此基础上自己改进。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。