跳至正文

Python进制转换的完全实现——2/10/16进制原/补码互转

标签:
Python进制转换的完全实现


一.需要转换的几种情况

不带符号位的整数 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进制转换的完全实现-0


二.Python自带的进制转换函数

1.1 bin(整数)

输入整数,可带字符串,可在数字之间加任意下划线_

在数字之间加下划线是Python3的新特性,注意下划线只能加在数字之间,头尾都会报错,且不能出现连续的两个下划线_,其它进制数也遵循这个规则,这也符合人们日常使用的习惯。

输出二进制字符串,且字符串前带有0b

注意:1. bin()输入负数无法转换,只会加上一个负号;2. 输入小数会报错

Python进制转换的完全实现-1

1.2 int(2/10/16进制数/字符串,base = 2/10/16)

int有多种用法,如下所示。

1.2.1 int(10进制数/字符串)

默认的base = 10可省略,此用法与进制转换无关

功能1:将10进制整数字符串(可带正负号, 可在数字之间加任意下划线_)转为整数,小数字符串是不行的。

功能2:对10进制数(可带正负号)取整,小数部分会被舍弃掉。

Python进制转换的完全实现-2

1.2.2 int(2进制字符串, base = 2)

发现:Python将0b1100视为一个数,它和整数12是完全等价的,和12一样可以带正负号。

当加上base = 2时,第一个参数必须是字符串。即int(2进制字符串, base = 2)是固定用法。字符串带不带0b效果一样,同样可带正负号, 可在数字之间加任意下划线_。

Python进制转换的完全实现-3

1.2.3 int(16进制字符串, base = 16)

类比1.2.2,16进制和2进制对于int()的用法是一样的。

Python将0xFF视为一个数,完全等价于255,可带正负号,且字母不区分大小写。

当加上base = 16后,第一个参数必须是字符串,所以int(16进制字符串, base = 16)也是固定用法。字符串带不带0x效果一样,不区分大小写,也可带正负号, 可在数字之间加任意下划线_。

Python进制转换的完全实现-4

1.3 hex(整数)

hex()和bin()的使用完全一样,输入整数,可带正负号,可在数字之间加任意下划线_。输出16进制字符串,带有0x的前缀。

注意:1. 不能转换负数,负号会保留。2. 不能输入小数,会报错。

Python进制转换的完全实现-5


三.不带符号位的自编函数实现进制转换

因篇幅问题,代码略,请去我的博客网站或者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与嵌入式知识,软件,工具等内容,欢迎大家关注。

0 0 投票数
文章评分
订阅评论
提醒
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x
目录