前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 代码转换成0101010

python 代码转换成0101010

作者头像
叶子陪你玩
发布2022-05-22 14:57:44
5030
发布2022-05-22 14:57:44
举报
文章被收录于专栏:叶子陪你玩编程

计算机只能识别010101010这种二进制数据,

这种数据让我们来读就比较难了,如果我告诉你上面的数字其实对应的就是下面的内容,是否就很容易看懂了呢。

如何将这两种内容相互转换呢?这就涉及到进制数与编码的知识了。


首先看十进制的数字是怎样转换成二进制数字的。

代码语言:javascript
复制
>>> bin(3)
'0b11'
>>> bin(10)
'0b1010'

八进制和十六进制也有对应的方法。

代码语言:javascript
复制
>>> oct(8)
'0o10'

>>> oct(12)
'0o14'
>>> hex(10)
'0xa'
>>> hex(17)
'0x11'

那二进制,八进制或者十六进制又怎么变回十进制呢?一个int全搞定。

代码语言:javascript
复制
>>> int('11',2)
3
>>> int('1010',2)
10
>>> int('10',8)
8
>>> int('14',8)
12
>>> int('a',16)
10
>>> int('11',16)
17

进制之间有相互转换呢?

可以统一先到十进制,然后从十进制过渡到对应的进制数。


在 python 中有一个 ord 方法,可以将任意字符转换成 unicode code。通俗点说就是一个数字。不过这个数字和字符是一一对应的。

代码语言:javascript
复制
>>> help(ord)
Help on built-in function ord in module builtins:
ord(c, /)
    Return the Unicode code point for a one-character string.

与ord 相对应的还有一个chr方法,可以将一个数字变成字符。

代码语言:javascript
复制
>>> help(chr)
Help on built-in function chr in module builtins:
chr(i, /)
    Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.

比如字母A 可以通过 ord('A') 获取其对应的十进制数65,小写的a就是 97。

代码语言:javascript
复制
>>> ord('A')
65
>>> ord('a')
97

有了十进制数,我们就可以通过bin将其转换成二进制数了。

代码语言:javascript
复制
>>> ord('a')
97
>>> bin(ord('a'))
'0b1100001'
>>> ord('1')
49
>>> bin(ord('1'))
'0b110001'

中文文字又该怎样处理呢?同样可以使用 ord

代码语言:javascript
复制
>>> ord('中')
20013
>>> bin(20013)
'0b100111000101101'

那二进制数又怎样回到我们可以看的动的文本呢?通过chr方法,传入对应的十进制数字即可。

代码语言:javascript
复制
>>> chr(20013)
'中'
>>> chr(65)
'A'

单个字符都非常好处理,那要是一句话或者一篇文章呢?

很容易想到的就是循环遍历,一个个字符处理即可。

代码语言:javascript
复制
>>> for i in 'hello 中国':
    print(bin(ord(i)))
    
0b1101000
0b1100101
0b1101100
0b1101100
0b1101111
0b100000
0b100111000101101
0b101011011111101

一行输出。

代码语言:javascript
复制
>>> for i in 'hello 中国':
    print(bin(ord(i)),end='')
    
0b11010000b11001010b11011000b11011000b11011110b1000000b1001110001011010b101011011111101

也可以通过replace方法删除掉开头的0b二进制标识符。

代码语言:javascript
复制
>>> for i in 'hello 中国':
    print(bin(ord(i)).replace('0b',''),end='')
    
11010001100101110110011011001101111100000100111000101101101011011111101

那如果要将这一串数字变回原本的文字,该如何做呢?

代码语言:javascript
复制
11010001100101110110011011001101111100000100111000101101101011011111101

这个好像有点难了,难点主要是因为每个字符它的位数是不定的。怎样知道哪些数字表示一个字符呢?

要不采取空格分隔,要不就让每个字符的二进制数是等长度。

根据上面的原理,我们实现文章开头所讲的两种内容相互转换。

你是不是还听过 ASCII, GBK,GB18030,Unicode,UTF-8,encode,decode, base64 等各种名词了,感兴趣的可以根据关键词去看看更详细的编码解码知识。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 叶子陪你玩编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档