Python数据转换二进制

Python数据转换二进制

十二月 11, 2019

Python把数据转换为二进制


其实说起来,Python说到底还是快捷,方便,看着赏心悦目(对自己).
但是如果我放出以下的两个函数,就不是太友好了…

1
2
def encode(s):
return ''.join([bin(ord(c)).replace('0b', '') for c in s])
1
2
def decode(s):
return ''.join([chr(i) for i in [int(b, 2) for b in s.split(' ')]])

说实话,换做是我,假设是看别人的代码,看到这么一行,我的心态也会直接爆炸.
万一这个老哥后面在备注一句

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算法的时候,突然想到了,就心血来潮的给写了.然后后来自己看着都烦,于是正好借着机会给自己疏通疏通.
(真就是写推导式的坏处啊,还不写备注= =)