您现在的位置是: 网站首页> 学习笔记> python python
python有符号十六进制与十进制的相互转换
2022-04-15 3845人已围观
最近在使用ros2, python-can对接can协议时,需要用到进制转换的功能,
用python自带的转换工具转换出来不太对,目前主要体现在负数的转换上。
如对接文档上的-50:
在网上查了很多资料,找到一篇可用的文章,对代码做了细微的调整,记录下以备后用:
def hex2bin(hex_str: str, bin_width: int = -1):
hex_str = hex_str.strip()
if hex_str[0] in ['+', '-', '_'] or hex_str[-1] == '_' or '__' in hex_str:
print('输入不合法,必须为16进制补码,不允许带正负号,首尾不能是下划线,不能连续出现两个下划线')
elif hex_str[:2].lower() == '0x':
hex_str = hex_str[2:]
hex_str = hex_str.replace('_', '')
bin_str = ''.join([oneHex2fourBin(s) for s in hex_str])
for i in range(len(bin_str) - 1):
if bin_str[i + 1] == bin_str[0]:
if i + 1 == len(bin_str) - 1:
bin_str = bin_str[i:]
else:
continue
else:
bin_str = bin_str[i:]
break
if bin_str == '00':
bin_str = '0'
if bin_width == -1:
pass
elif bin_width < len(bin_str):
print('位宽参数<16进制补码,请修正位宽')
else:
bin_str = bin_str[0] * (bin_width - len(bin_str)) + bin_str
return '0b' + bin_str
def dec2hex(self, data: int):
return hex(data % 256)
def bin2dec(bin_str: str):
bin_str = bin_str.strip()
if bin_str[:2] == '0b':
if bin_str[2] == '_':
bin_str = bin_str[3:]
else:
bin_str = bin_str[2:]
if bin_str[0] == '_':
print('输入不合法,首字符不能是下划线,且不允许出现连续两个下划线')
elif bin_str[0] == '0':
return int(bin_str, base=2)
elif bin_str[0] == '1':
a = int(bin_str, base=2)
bin_str = bin_str.replace('_', '')
return a - 2 ** len(bin_str)
else:
print('输入不合法,必须为2进补码,不允许带正负号')
def oneHex2fourBin(one_hex: str):
raw = {'A': '1010', 'B': '1011', 'C': '1100', 'D': '1101', 'E': '1110', 'F': '1111'}
if one_hex in [str(i) for i in range(10)]:
return '{:0>4}'.format(str(bin(int(one_hex)))[2:])
elif one_hex.upper() in ['A', 'B', 'C', 'D', 'E', 'F']:
return raw[one_hex.upper()]
else:
print('十六进制格式错误, 只能包含0~9, a~f,A~F')
if __name__ == '__main__':
print(bin2dec(hex2bin('0xce')))
相关文章
文章评论
暂无评论添加评论
点击排行
本栏推荐
标签云
热评文章
- django使用qq邮箱发送邮件
- mysql8设置数据库远程连接
- pip修改下载源为国内源
- win10看不到win7共享的文件夹的解决方法
- SQLyog连接 Mysql 8.0.11 报error no.1251- Client does not support authentic...
- 使用Oracel Net Nanager配置Oracle数据库远程访问
- 将anaconda的下载源切换为国内的源
- Python+selenium+firefox设置代理IP
- selenium+firefox+js实现动态设置firefox浏览器代理IP
- scrapy文件下载(高新技术企业认定网)
- Python调用JS代码
- Chrome浏览器的overrides的使用
站点信息
- 建站时间:2021-01-01
- 网站程序:Django 3.1.2
- 文章统计:53篇
- 文章评论:31条
- 统计数据: