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])
#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
'''
下面两句是一样的
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'
#以上函数有重复造轮子的嫌疑
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、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】 |