Python中数值的表示
进制表示
n= 97 # 十进制表示97
n= 0b01100001 # 二进制表示97
n= 0x61 # 十六进制表示97
n= 0o141 # 八进制表示97
上面四种方式定义的值是等价的,均为十进制的97
ASCII编码表示
n= "a"
n= "\b01100001"
n= "\x61"
n= "\o141"
上面四种方式定义的值也是等价的,均为字符"a",多字节字符或字符串同样可以用上述方式表示
# 使用encode查看一下中国的二进制编码为
str.encode("中国")
# print: b'\xe4\xb8\xad\xe5\x9b\xbd',前缀 b表示该值的类型为bytes,区别于字符串的表示
# 因此,我们可以使用这个字节表示来定义“中国”
a= '\xe4b8ade59bbd'
# 或者 '\xe4\xb8\xad\xe5\x9b\xbd'
Python进制转换
# 内置函数
chr(97) # "a"
ord('a') # 97
# 转化十进制数的不同进制表示
bin(97)
oct(97)
hex(97)
# 使用format(),如:
format(97,"#x") # "#0o" "#b" 或 "x" "o" "b"
# 3.6版本还可以使用{}
f'{255:X} # f'{255:#X}
# 使用C风格表示
"%x"%10 # "%#x"%10
"%o"%10 # "%#o"%10
将一个字节,字符或字符串转换成值类型
ord("a")
int.from_bytes(b"a","big") # big表示大端模式,即小地址存高字节
bytes与bytearray类型
类比str与list理解bytes和bytearray
bytes
可以看作是一组二进制数值(0-255)的str
序列
bytearray
可以看作是一组二进制数值(0-255)的list
序列,每个元素是一个byte
bytes类型
将str
转换为bytes
,即将str
中每个字符转换成相应的二进制编码
s= "abc"
bs= bytes("abc")
二进制类型bytes
使用b'abc'
表示,使用二进制存储
b= bytes([97,98,99])
print(b) # b'abc'
字符串转bytes类型
bs= bytes("abc","utf-8")
# 或 bs= "abc".encode()
# 十六进制转换成bytes类型
b= bytes.fromhex("61 62 63") # b"abc"
b.hex()
数值转换成bytes类型
b= bytes(range(97,100)) # b'abc'
# b= bytes([97,98,99])
# b= bytes([97])
# 直接传入十进制数值对象而不是可迭代对象,将会生成对应数值字节的空bytes
b4 = bytes(3) # b'\x00\x00\x00' 三个空字符的 bytes
# 利用bytes对象转换为十进制数值
n= int.from_bytes(b"abc","big") # "abc"三个字节拼接在一起作为一个二进制数,并计算为十进制数输出
print(num) # 6382179
bytes方法
基本上和str
方法一致,如replace
,split
,partation
等操作,区别是bytes
操作的是一个bytes
二进制字节
b"abc".replace(b"a", b"x")
bytearray类型
类似于list
类型,每个元素为字节值
需要一个可迭代对象来初始化bytearray
对象
bytearray("abc", encoding="utf-8")
bytearray(b"abc") # bytes与bytearray不存在编码问题
bytearray([97,98,99]) # bytearray(b'abc')
ba= bytearray(range(97,100))
ba[4]= 122
bytearray方法
类似于列表,如append
,extend
,insert
等操作
n= bytearray(b"abc")
n.extend(n) # bytearray(b'abcabc')
标签:bytearray,abc,字节,Python,bytes,数值,二进制,97
From: https://www.cnblogs.com/sgqmax/p/18519932