一.需要转换的几种情况
不带符号位的整数 | 2进制 | 10进制 | 16进制 |
---|---|---|---|
2进制 | — | bin2dec() | bin2hex() |
10进制 | dec2bin() | — | dec2hex() |
16进制 | hex2bin() | hex2dec() | — |
带符号位,即2进制用补码表示。
带符号位的整数 | 2进制 | 10进制 | 16进制 |
---|---|---|---|
2进制 | — | signed_bin2dec() | signed_bin2hex() |
10进制 | signed_dec2bin() | — | signed_dec2hex() |
16进制 | signed_hex2bin() | signed_hex2dec() | — |
说明:这里忽略了八进制,因为很少用到。
部分函数的实现效果(myBin2dec2hex为自编模块,其中未使用任何第三方库):
二.Python自带的进制转换函数
1.1 bin(整数)
输入整数,可带字符串,可在数字之间加任意下划线_。
在数字之间加下划线是Python3的新特性,注意下划线只能加在数字之间,头尾都会报错,且不能出现连续的两个下划线_,其它进制数也遵循这个规则,这也符合人们日常使用的习惯。
输出二进制字符串,且字符串前带有0b。
注意:1. bin()输入负数无法转换,只会加上一个负号;2. 输入小数会报错
1.2 int(2/10/16进制数/字符串,base = 2/10/16)
int有多种用法,如下所示。
1.2.1 int(10进制数/字符串)
默认的base = 10可省略,此用法与进制转换无关。
功能1:将10进制整数字符串(可带正负号, 可在数字之间加任意下划线_)转为整数,小数字符串是不行的。
功能2:对10进制数(可带正负号)取整,小数部分会被舍弃掉。
1.2.2 int(2进制字符串, base = 2)
发现:Python将0b1100视为一个数,它和整数12是完全等价的,和12一样可以带正负号。
当加上base = 2时,第一个参数必须是字符串。即int(2进制字符串, base = 2)是固定用法。字符串带不带0b效果一样,同样可带正负号, 可在数字之间加任意下划线_。
1.2.3 int(16进制字符串, base = 16)
类比1.2.2,16进制和2进制对于int()的用法是一样的。
Python将0xFF视为一个数,完全等价于255,可带正负号,且字母不区分大小写。
当加上base = 16后,第一个参数必须是字符串,所以int(16进制字符串, base = 16)也是固定用法。字符串带不带0x效果一样,不区分大小写,也可带正负号, 可在数字之间加任意下划线_。
1.3 hex(整数)
hex()和bin()的使用完全一样,输入整数,可带正负号,可在数字之间加任意下划线_。输出16进制字符串,带有0x的前缀。
注意:1. 不能转换负数,负号会保留。2. 不能输入小数,会报错。
三.不带符号位的自编函数实现进制转换
因篇幅问题,代码略,请去我的博客网站或者Gitee/Github中查看。
3.1 bin2dec ()—— 不带符号位的2进制字符串 -> 10进制整数
3.2 bin2hex() —— 不带符号位的2进制字符串 -> 不带符号位的16进制字符串
3.3 dec2bin() —— 10进制整数/字符串 -> 不带符号位的2进制字符串
3.4 dec2hex() —— 10进制整数/字符串 -> 不带符号位的16进制字符串
3.5 hex2dec() ——不带符号位的16进制字符串 -> 10进制整数
3.6 hex2bin() —— 不带符号位的16进制字符串 -> 不带符号位的2进制字符串
四. 带符号位的自编函数实现进制转换
4.1 signed_bin2dec ()—— 2进制补码字符串 -> 10进制整数
4.2 signed_bin2hex() —— 2进制补码字符串 -> 16进制补码字符串
4.3 signed_dec2bin() —— 10进制数/字符串 -> 2进制补码字符串
4.4 signed_dec2hex() —— 10进制数/字符串 -> 16进制补码字符串
4.5 signed_hex2bin() —— 16进制补码字符串 -> 2进制补码字符串
4.6 signed_hex2dec() —— 16进制补码字符串 -> 10进制整数
五. import自编模块
见我的另一篇博客,Python如何导入自编py文件 – 徐晓康的博客 (myhardware.top)
六. Python源码及其测试文档分享
我将上述所有转换函数放入myBin2dec2hex.py文件中,还有测试用的jupter notebook文档,一起放入了我的开源仓库中,需要的可以去以下链接自取。
Gitee与Github保持同步:
Python自编模块–进制转换: Python进制转换,可实现2进制,10进制,16进制的原码/补码的互转, (gitee.com)
zhengzhideakang/python-self-written-modul–binary-conversion (github.com)
如果本文对你有所帮助,欢迎点赞、转发、收藏、评论让更多人看到,赞赏支持就更好了。
如果对文章内容有疑问,请务必清楚描述问题,留言评论或私信告知我,我看到会回复。
徐晓康的博客持续分享高质量硬件、FPGA与嵌入式知识,软件,工具等内容,欢迎大家关注。