Python入门:字符转换为二进制及进制之间转换



字符、进制之间的转换关系

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



字符、进制之间的转换关系

猜你喜欢

转载自blog.csdn.net/jiulixiang_88/article/details/80939533