python的bytes数据类型
bytes主要是⽤于⼆进制的数据处理的数据类型,⾮常适合于socket编程。
bytes
>>> type(b'xxxxx')
<class 'bytes'>
>>> type('xxxxx')
<class 'str'>
bytes是byte的序列,⽽str是unicode的序列。
1、str 转换成 bytes ⽤ encode() ⽅法:(注意:这有个坑,de不加括号和加括号是不⼀样的,⾃⼰试试,初学貌似2.0不影响,3.0变了,不加括号开发环境语法不报错)
str = '⼈⽣苦短,我⽤Python!'
bytes = de()
print(bytes)
输出:
b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8Python!'
2、好了,反转换 decode() :
bytes = b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8Python!'
str = bytes.decode()
print(str)
输出:
⼈⽣苦短,我⽤Python!
bytearray
1、bytearray和bytes不⼀样的地⽅在于,bytearray是可变的。
str = '⼈⽣苦短,我⽤Python!'
bytes = de())
bytes = bytearray(b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8Python!')
str = bytes.decode()
print(str)
输出:
'⼈⽣苦短,我⽤Python!'
2、改变bytearray
bytes[:6] = bytearray('⽣命'.encode())
bytes = bytearray(b'\xe7\x94\x9f\xe5\x91\xbd\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8Python!')
str = bytes.decode()
print(str)
输出:
⽣命苦短,我⽤Python!
各种 bytes :
a = bytes('abc', 'utf-8')
print(a)
> b'abc'
b  = bytes(1)
print(b)
> b'\x00'
c = bytes([2,3,6,8])
print(c)
> b'\x02\x03\x06\x08'
print(b"Python")
> b'Python'
python = (b'P' b'y' b"t" b'o' b'n')
print(python)
> b'Pyton'
Bytes 代表的是(⼆进制)数字的序列,只不过在是通过 ASCII 编码之后才是我们看到的字符形式,如果我们单独取出⼀个字节,它仍然是⼀个数字:
1print(b"Python"[0])<br>> 80
我们可以⽤ b"*" 的形式创建⼀个字节类型,前提条件是这⾥的 * 必须是 ASCII 中可⽤的字符,否则将会超出限制:
print(b"⾬")
> File "", line 1
print(b"⾬")
^
SyntaxError: bytes can only contain ASCII literal characters.
错误提⽰说明:字节类型只能允许 ASCII 字符(0~127~255)。ASCII 表⾥⾯所有的字符只占据了 [31, 127]
那对于这⼀范围之外的数字我们要怎么才能表⽰为字节类型?答案就是⽤特殊的转义符号x+⼗六进制数字 :
print(b'xff'[0])
> 255
print(b'x24')
> b'$'
反过来我们也可以将数字(0~255)转变成转义后的字节类型:
print(bytes([24]))
> b'x18'
print(bytes([36,36,36])) # 记住字节类型是⼀个序列
或者直接从⼗六进制得来:
print(bytes.fromhex("7b 7d"))
> b'{}'
# 逆运算
print(b'{ }'.hex())
> 7b207d
int(b' '.hex(), base=16)
> 32
测试的⼀些代码:
print("$".encode('ascii'))
> b'$'
print("$".encode('ascii')[0])
> 36
ba = bytearray(b'hello')
ba[0:1] = b'w'
print(ba)
bytearray(b'wello')
可是如果我们对⼀些奇怪的字符进⾏ ASCII 编码,就会发⽣异常:ordinal not in range(128)
>unicode文件格式

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。