Python中二进制的理解

一直没怎么搞清楚Python中的二进制,今天网上收集了一些资料,并做了个小测试来加深自己对Python中二进制的认识。

1、二进制表示方法

通常二进制数据是通b开头,后面跟着双引号或者单引号括起来的内容表示,其中括起来的内容可以是ASCII码中的字符,也可以如\0xe4格式的十六进制组成的内容,如:

>>>b'abc'		#由ASCII码字符表示的二进制
b'abc'
>>>b'\xe3\xf4abd'	#由ASCII码字符和类似\x**格式组合表示的二进制
b'\xe3\xf4abd'

2、 二进制的本质

我们通过for循环查看一下二进制数据中到底是什么:

>>>for i in b'abc':    #单个字节循环
       print(i)
#结果
97		
98
99       

由于ASCII编码为97对应的字符为a98b99c,所以b'abc'本质为'abc'3字符对应的ASCII编码,我们将字符转换成由0、1表达的二进制:

>>>for i in b'abc':
       print(bin(i).end=" ")
0b1100001 0b1100010 0b1100011       

所以b'abc'二进制本质就是表示3个字节,3个字节具体的内容为01100001 01100010 01100011
但是当一个字节(8个bits)确定后,不一定能在ASCII码表中找到对应的字符,如11100100,此时可采用十六进制\xe4来表示(十六进制中:e→1110,4→0100)。
另外,b'abc'同样也可以通过b'\x61\x62\x63'表示(\x61→97→a\x62→98→b\x63→99→c),只是前者表述更加简单直观。

>>>b'\x61\x62\x63'
b'abc'

所以python中,二进制数据本质是字节数据,每个字节由8个bit组成,采用ASCII码中的字符(能找到时)或者十六进制格式(找不到时)或者其组合格式来表示的主要目的是使得二进制表达更加简化和直观(b'a'01100001直观、简单;\xe411100100直观、简单)。

3 、非ASCII码字符如何表示成二进制

ASCII表中字符,其二进制可直接采用类似b'abc'表达,但是非ASCII码字符如“中”该怎么表示成二进制呢?直接b’中’可行吗?

>>> b'中'
SyntaxError: bytes can only contain ASCII literal characters.

直接报错……
这里就牵涉到编码的问题了,也就是非ASCII码字符需要按照一定的编码方案进行编码,编码过程就是将字符转化为二进制的过程,反过来就是解码,将二进制转化为字符或字符串的过程。
我们按utf-8编码方式进行演示。

>>>'中'.encode(encoding='utf-8')
b'\xe4\xb8\xad'		#3个字节
>>>for i in b'\xe4\xb8\xad':
       print(bin(i),end="")
0b111001000b101110000b101011010b1101100b110110

所以’中’字符按照utf-8编码方式转化为二进制为0b111001000b101110000b101011010b1101100b110110

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值