Python入门:字符转换为二进制及进制之间转换
程序员文章站
2024-02-05 12:51:52
...
python3.5
1、python中的ord及chr函数指的就是通常意义的unicode,即2个字节
2、UTF-8是1-6个字节的可变长编码方式,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节
自定义转换函数
#NumOctHex.py
#自己写一个模块NumOctHex.py,包含8、10、16转换成2进制
'''
str_num的类型必需是可被str转换的整数,如:‘111’、‘123’
16进制中str_num可以是‘123456789abcdef’,且必须是0-9及a-f之间
8进制中str_num可以是‘1234567’,且必须是0-7之间的数
'''
'''
系统自带的转换方法都是通过10进制进行转换的,下面的三个函数是通过将8、10、16转换成2进制
'''
#十六进制to二进制
def hex2bin(str_num):
num = int(str_num,16) #将16进制转换为10进行
bit = []
while True:
if num == 0: break
num,rem = divmod(num,2) #10进制转换2进制,使用除2取余
bit.append(str(rem)) #默认加入列表是filo(先进后出)方式
return ''.join(bit[::-1]) #需要反向排列,即为正确的2进制
#十进制to二进制
def dec2bin(str_num):
num = int(str_num,10)
bit = []
while True:
if num == 0: break
num,rem = divmod(num,2)
bit.append(str(rem))
return ''.join(bit[::-1])
#八进制to二进制
def oct2bin(str_num):
num = int(str_num,8)
bit = []
while True:
if num == 0: break
num,rem = divmod(num,2)
bit.append(str(rem))
return ''.join(bit[::-1])
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
运行结果
#test.py
import NumOctHex
ten = NumOctHex.dec2bin('10')
print(ten)
sixteen = NumOctHex.hex2bin('a')
print(sixteen)
eight = NumOctHex.oct2bin('12')
print(eight)
################运行结果如下:
1010
1010
1010
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
'''
下面两句是一样的
str(obj,encoding=‘utf-8’,errors=‘strict’)
''.encode(encoding=‘utf-8’,errors=‘strict’)
'''
#使用ord的二进制值,即2个字节的unicode
In[70]: ord('中')
Out[70]: 20013
In[73]: dec2bin(str(ord('中')))
Out[73]: '100111000101101'
#使用utf-8的二进制值,即可变长的unicode
In[75]: dec2bin(str('中'.encode('utf-8').hex()))
Out[75]: '111001001011100010101101'
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
#以上函数有重复造*的嫌疑
In[15]: '中'.encode() #先转换成16进制的bytes
Out[15]: b'\xe4\xb8\xad'
In[16]: '中'.encode().hex() #然后去除16进制的标识'b'和'\x'
Out[16]: 'e4b8ad'
In[17]: int('中'.encode().hex(),16) #16进制转换成10进制
Out[17]: 14989485
In[18]: bin(int('中'.encode().hex(),16)) #10进制转换成2进制
Out[18]: '0b111001001011100010101101'
#以上是中文字符转换成2进制的方法
##################################################
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
1、num必须是带双引号的,可表示对应数值的字符
int(num,2)=========>将2进制转换成10进制【不能出现0、1以外的字符】
int(num,8)=========>将8进制转换成10进制【不能出现0-7以外的字符】
int(num,16)=========>将16进制转换成10进制【不能出现0-9和a-f以外的字符】
2、num是10进制的字数
bin(num)=========>将10进制转换成2进制【不能出现0-9以外的字符】
oct(num)=========>将10进制转换成8进制【不能出现0-9以外的字符】
hex(num)=========>将10进制转换成16进制【不能出现0-9以外的字符】
进制计算
10进制 | 16进制 | 8进制 |
---|---|---|
25 | 2*16 + 5 | 2*8 + 5 |
1、10进制中的一位对应8进制中的三位,然后用二进制进行填位;
2、10进制中的一位对应16进制中的四位,然后用二进制进行填位;
10进制 | 2——-5 |
---|---|
16进制 | 0000—-0000 【0010 0101】 【37】 |
8进制 | 000—–000 【010 101】 【21】 |
from :https://blog.csdn.net/foryouslgme/article/details/51967368
上一篇: 带复选框的表格(ant design)
下一篇: Vue教程全选和取消全选