Ubuntu18.04-ROS-Python-通过周立功Can发送16进制整数

2023-05-16

简介

最近写控制底盘车的驱动,使用到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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu18.04-ROS-Python-通过周立功Can发送16进制整数 的相关文章

随机推荐