在 Python 中使用 bytearray 究竟是如何工作的?
How exactly works the use of bytearray in Python?
我完全是 Python 的新手,我有以下问题。
根据我在声明 字节数组的文档中读到的内容 我不能分配一个不在 0 到 255 范围内的值。
事实上做这样的事情:
data = bytearray(1000)
for i in range(len(data)):
data[i] = 10 - i
for b in data:
print(hex(b))
我得到以下异常:
Traceback (most recent call last):
File "main.py", line 4, in <module>
data[i] = 10 - i
ValueError: byte must be in range(0, 256)
所以第一个问题:它到底是什么意思?这意味着我可以声明一个最多包含 256 个字节的字节数组?或者我错过了什么?如果这个推理是正确的:如果我必须读取一个包含超过 256 字节的二进制文件,我该如何处理这种情况?
此外,在另一个示例中,我发现此代码片段用于将数据从源二进制文件复制到目标文件:
from os import strerror
srcname = input("Source file name?: ")
try:
src = open(srcname, 'rb')
except IOError as e:
print("Cannot open source file: ", strerror(e.errno))
exit(e.errno)
dstname = input("Destination file name?: ")
try:
dst = open(dstname, 'wb')
except Exception as e:
print("Cannot create destination file: ", strerr(e.errno))
src.close()
exit(e.errno)
buffer = bytearray(65536)
total = 0
try:
readin = src.readinto(buffer)
while readin > 0:
written = dst.write(buffer[:readin])
total += written
readin = src.readinto(buffer)
except IOError as e:
print("Cannot create destination file: ", strerr(e.errno))
exit(e.errno)
print(total,'byte(s) succesfully written')
src.close()
dst.close()
如您所见,它正在声明一个包含超过 255 个元素的字节数组:
buffer = bytearray(65536)
我想我错过了什么。它究竟是如何工作的?
消息很清楚:数组中的每个 value 必须是一个字节,并且是一个 "byte must be in range(0, 256)"。它没有说明数组中可以包含多少个元素。
我完全是 Python 的新手,我有以下问题。
根据我在声明 字节数组的文档中读到的内容 我不能分配一个不在 0 到 255 范围内的值。
事实上做这样的事情:
data = bytearray(1000)
for i in range(len(data)):
data[i] = 10 - i
for b in data:
print(hex(b))
我得到以下异常:
Traceback (most recent call last):
File "main.py", line 4, in <module>
data[i] = 10 - i
ValueError: byte must be in range(0, 256)
所以第一个问题:它到底是什么意思?这意味着我可以声明一个最多包含 256 个字节的字节数组?或者我错过了什么?如果这个推理是正确的:如果我必须读取一个包含超过 256 字节的二进制文件,我该如何处理这种情况?
此外,在另一个示例中,我发现此代码片段用于将数据从源二进制文件复制到目标文件:
from os import strerror
srcname = input("Source file name?: ")
try:
src = open(srcname, 'rb')
except IOError as e:
print("Cannot open source file: ", strerror(e.errno))
exit(e.errno)
dstname = input("Destination file name?: ")
try:
dst = open(dstname, 'wb')
except Exception as e:
print("Cannot create destination file: ", strerr(e.errno))
src.close()
exit(e.errno)
buffer = bytearray(65536)
total = 0
try:
readin = src.readinto(buffer)
while readin > 0:
written = dst.write(buffer[:readin])
total += written
readin = src.readinto(buffer)
except IOError as e:
print("Cannot create destination file: ", strerr(e.errno))
exit(e.errno)
print(total,'byte(s) succesfully written')
src.close()
dst.close()
如您所见,它正在声明一个包含超过 255 个元素的字节数组:
buffer = bytearray(65536)
我想我错过了什么。它究竟是如何工作的?
消息很清楚:数组中的每个 value 必须是一个字节,并且是一个 "byte must be in range(0, 256)"。它没有说明数组中可以包含多少个元素。