Python数据转换二进制
Python把数据转换为二进制
其实说起来,Python说到底还是快捷,方便,看着赏心悦目(对自己).
但是如果我放出以下的两个函数,就不是太友好了…
1 | def encode(s): |
1 | def decode(s): |
说实话,换做是我,假设是看别人的代码,看到这么一行,我的心态也会直接爆炸.
万一这个老哥后面在备注一句
1 | # MAGIC, DON'T TOUCH! |
估计心态就直接爆炸.
那么,我就来分开说说这个的原理吧= =
(推导式真的是一个自己用着很爽,别人看着也很爽的东西= =)
Encode
有一说一,其实原理都很简单.
首先介绍一下四个方法:
.join()
这个得好好说一说,我们暂时把这个方法写成
a.join(b)
此时a是一个字符,或者是一个字符串,b是一个序列(字符串,列表,元组)
规则就是将a插入到b的每一个元素中间.
.replace()
简而言之,替换
bin()
将int型的数据转换为二进制形式,但是格式是(0b111100),此时,输出的格式是”str”
ord()
输出字符的ASCII值
在了解了这些基本用法以后,就可以翻译上面那个函数了.
1 | return ''.join([bin(ord(c)).replace('0b', '') for c in s]) |
return不看, ‘’.join()最后看,那么我们目的很明确了,就是翻译后面的推导式.[bin(ord(c)).replace('0b', '') for c in s]
这个s是函数输入进来的字符串s.
大概意思就是说,
c = s[i]
把c变成ASCII码,再把这个ASCII码中的0b给扬了,然后保存到这个列表里.
最后再把这个列变拼接起来,成为一个字符串.
是不是超级简单?
那我们就顺势再看看Decode吧!
Decode
''.join([chr(i) for i in [int(b, 2) for b in s.split(' ')]])
了解了第一个,这个就更加简单了啊.
主要还是说一下int(b, 2),简单来说,就是强制类型转换为int,并且b是二进制,转换为10进制的数.
然后就逐个翻译就好啦.
怎么编码,就怎么解码.就完成了进制转换啊!
P.S. 为什么会想到写这个呢? 因为再写RC4算法的时候,突然想到了,就心血来潮的给写了.然后后来自己看着都烦,于是正好借着机会给自己疏通疏通.
(真就是写推导式的坏处啊,还不写备注= =)