Python代码片段的解释
对于一个课堂作业,我正在分析亚马逊Kindle数字版权管理的实现是如何工作的,以及如何击败它。在我的研究中,我遇到了一组Python脚本,它们从加密中提取图书数据。它符合我解释论文中加密破解部分的需要 问题是,除了打印“Hello World”之外,我对Python不太精通,也没有其他经验 在阅读源代码时,我遇到了这个片段Python代码片段的解释,python,Python,对于一个课堂作业,我正在分析亚马逊Kindle数字版权管理的实现是如何工作的,以及如何击败它。在我的研究中,我遇到了一组Python脚本,它们从加密中提取图书数据。它符合我解释论文中加密破解部分的需要 问题是,除了打印“Hello World”之外,我对Python不太精通,也没有其他经验 在阅读源代码时,我遇到了这个片段 def __init__(self, infile): # initial sanity check on file self.data_file = fil
def __init__(self, infile):
# initial sanity check on file
self.data_file = file(infile, 'rb').read()
self.mobi_data = ''
self.header = self.data_file[0:78]
if self.header[0x3C:0x3C+8] != 'BOOKMOBI' and self.header[0x3C:0x3C+8] != 'TEXtREAd':
raise DrmException("invalid file format")
self.magic = self.header[0x3C:0x3C+8]
self.crypto_type = -1
我对代码的解释如下:
self.data\u文件
是一个字节数组,由文件(infle,'rb')
调用上的read()
返回self.header
是数据文件前79个字节的值我遇到的问题是,
self.header[0x3C:0x3C+8]
的意思是什么?这是一个正常的切片,就像self.data\u文件[0:78]
,除了使用十六进制文字作为偏移量之外0x3C
在base10中是60,因此它与self.header[60:60+8]
相同,它是一个普通的切片,与self.data\u文件[0:78]
类似,只是使用十六进制文字作为偏移量0x3C
在base10中是60,因此它与self.header[60:60+8]
self.header[0x3C:0x3C+8]
将从header
获取一个8字节的字符串,从偏移量0x3C开始。self.header[0x3C:0x3C+8]
将从header获取一个8字节的字符串,从偏移量0x3C开始。的长度[0:78]
是78,而不是79。片段不包含结束值,因此它是0..77
@MarkRansom,我使用的大多数代码都包含最后一个值,而不是独占的。谢谢你的提示。[0:78]
的长度是78,而不是79。片段不包含结束值,因此它是0..77
@MarkRansom,我使用的大多数代码都包含最后一个值,而不是独占的。谢谢你的提示。