-4

我在 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)

我认为我错过了一些东西。它究竟是如何工作的?

4

1 回答 1

2

消息很清楚:数组中的每个都必须是一个字节,并且“字节必须在范围(0, 256)内”。它没有说明数组中有多少元素。

于 2020-01-02T00:16:04.790 回答