gpt4 book ai didi

Python bytearray() 索引分配

转载 作者:行者123 更新时间:2023-12-01 05:16:21 26 4
gpt4 key购买 nike

请耐心听我说;我是系统管理员而不是开发人员。下面的代码对我来说效果很好。但是当我将其分成两个文件以便类位于一个文件中而逻辑位于另一个文件中时,我收到一条错误,指出 data[0] 是 str 并且不支持赋值

精简工作示例

class partition:
def __init__(self):
self.data = bytearray(b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")
return

def boot_flag(self, value=None):
if value is not None:
self.data[0] = value
return
else:
return self.data[0:1][::-1]


part1 = partition()
print str(part1.data).encode('hex')
value = b"\xff"
part1.boot_flag(value)
print str(part1.data).encode('hex')

这是目前的完整类(class)。

class partition:
def __init__(self):
self.data = bytearray(b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")

def boot_flag(self, value=None):
if value is not None:
self.data[0] = value
return
else:
return self.data[0:1][::-1]

def start_chs(self, value=None):
if value is not None:
self.data[1:4] = value
return
else:
return self.data[1:4][::-1]

def type(self, value=None):
if value is not None:
self.data[4:5] = value
return
else:
return self.data[4:5][::-1]

def end_chs(self, value=None):
if value is not None:
self.data[5:8] = value
else:
return self.data[5:8][::-1]

def start_lba(self, value=None):
if value is not None:
self.data[8:12] = value
else:
return self.data[8:12][::-1]

def sectors(self, value=None):
if value is not None:
self.data[12:16] = value
else:
return self.data[12:16][::-1]

def load(self, data):
self.data = data
return

这是我用来测试类(class)的测试夹具。

import dospart
disk = open('/dev/sda', 'rb')
mbr = disk.read(512)
part1 = dospart.partition()
part1.load(mbr[446:462])
print str(part1.data).encode('hex')
part1.boot_flag(b"\xff")
print str(part1.data).encode('hex')

这是错误

Traceback (most recent call last):
File "test.py", line 13, in <module>
part1.boot_flag(b"\xff")
File "/Users/digitaladdictions/PycharmProjects/dospart/dospart.py", line 9, in boot_flag
self.data[0] = value
TypeError: 'str' object does not support item assignment

请注意,我可以很好地读取这些值。当我尝试写入 self.data[]

时,我只收到错误

[更新]

根据已接受的答案,这是我可以使用的新加载函数。

def load(self, data):
part = bytearray(data)
self.data = part
return

最佳答案

我认为这就是正在发生的事情。当您调用时:

part1.load(mbr[446:462])

self.data 被分配了一个字符串。从这一点来看,self.data 是一个字符串,而不是一个字节数组。所以当你这样做时

part1.boot_flag(b"\xff")

它正确地提示TypeError:'str'对象不支持项目分配

这就是我的意思:

>>> data_one = "My name is shaktimaan"
>>> data_two = data_one[5:10]
>>> type(data_one)
<type 'str'>

在第一种情况下,没有调用 load,因此 self.data 仍然是一个字节数组(在调用构造函数之后)。所以你的 boot_flag 按预期工作,没有提示。

我认为您需要修复 load 中的代码,以将字节数组分配给 self.data

关于Python bytearray() 索引分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23146837/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com