Ubuntu18.04-ROS-Python-通过周立功Can发送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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值