‘{}字符串’.format()
print(’{0:2d} {1:3d}’.format(0,1))
{0:02d} 第一个0对应format的0位置的数据 第二个0表示两位十进制数字的字符串,不够两位用0填充
print(’{0:2d} {1:3d}’.format(0,1)) 可写成print(’{:2d} {:3d}’.format(0,1))
ord() 转字母为对应的ASCII码
各种进制之间相互转化
int('0x17', 16) # 16进制转化为10进制 23
int('101010',2) # 二进制转化为10进制
bin(42) # 十进制转化为2进制 '0b101010'
oct(10) # 十进制转化为8进制'0o12'
hex(23) # 十进制转16进制 '0x17'
可以看到,转化为2/8/16进制都有自己专门的函数,他们都支持将10进制转化为各自进制数;
而10进制使用int加参数指定从多少进制转化而来。这样以10进制为中间变量就可以实现各个进制数之间的转化。
如果我们想看各种编码对应的二进制数是多少,十进制数是多少呢,要对b \u \x这样的东西进行处理。
首先,看unicode的16/10/2进制对应数值
s = "中文"
" ".join("{:02x}".format(ord(c)) for c in s) # 16进制 '4e2d 6587' 遍历s转成16进制 遍历数值之间用空格连接
" ".join("{:d}".format(ord(c)) for c in s) # 10进制 '20013 25991'
" ".join("{:b}".format(ord(c)) for c in s) # 二进制 '100111000101101 110010110000111'
上面代码的原理是
循环中的每个c对应’\u4e2d\u6587’中的\u4e2d和\u6587 ord是可以将\u前缀的16进制数识别出来并转化为8进制数
用format再将八进制数指定格式输出成16进制数,这两步相当于去掉了\u join将得到的16进制值用空格拼在一起
下面转化为10进制、二进制只是把format输出格式换了 “::::”.join© for c int s 遍历的c之间用::::来连接