简介
最近写控制底盘车的驱动,使用到can分析仪,对于can分析仪的描述和代码可以参考文章,其中有一个问题挺困扰我的,我们可以直接使用hex()内置函数把10进制整数转换为16进制,但转换出来是字符串的16进制,我们驱动器协议不识别字符串类型的16进制协议,必须发或者收16进制整数,那怎么办呢?本文告诉你方法,同时会给出一些常用的小函数,如补码转换为16进制整数问题。
问题描述
需要发送指令给驱动器,指令如[0x23, 0xff, 0x68, 0x00, 0xc8, 0x00, 0x00, 0x00],其中是16进制的整数,其中0xc8代表正整数一百,若直接使用hex(100)我们看到的内容如下:
>>> hex(100)
'0x64'
>>> type(hex(100))
<type 'str'>
问题解决
也就是说直接使用hex是不行的,当时我在想是不是需要自己重新根据16进制算法重新写一个,后来查了一下资料发现,想太多,解决方法也超简单,如下即可:
type(int(hex(100),16))
<type 'int'>
附加功能
功能1:hex(1)输出0x1,如何保证双位数输出如0x01
"0x{:02x}".format(1)
功能2:16进制负数转换为10进制有符号整数
from bitstring import Bits
kk=[67, 100, 96, 0, 156, 255, 255, 255]
print -1*(~(kk[7]<<24|kk[6]<<16|kk[5]<<8|kk[4]-1)&0xFFFFFFFF)