Python的数值与bytes类型

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')
posted @ 2024-11-01 13:09  sgqmax  阅读(75)  评论(0)    收藏  举报