1

我的作业要求我从视频文件中计算哈希值。所以我猜我需要做的是以某种方式将视频文件读取为二进制数据,然后用它进行散列恶作剧。问题是,我只知道如何读取和写入 .txt 文件——视频文件对我来说是全新的。所以我的问题是:

如何获取文件并将其作为二进制数据读取?

我该如何处理这些数据?我的意思是,我应该将它粘贴到一个字符串中还是应该使用某种数组?我想数字的数量会很大,我不希望我的电脑崩溃,因为我以一种非常低效的方式处理数据:D。

另外,当我说“二进制数据”时,我并不完全确定我在说什么,因为我对这类东西的经验有限。我的意思是,它不仅仅是一串 1 和 0,对吧?所以我也很感激关于“二进制数据”的速成课程:D

4

1 回答 1

2

文本数据和二进制数据之间确实没有区别。字符串只是一个字节序列。每个字节或几个字节的值对应于一个文本字符。因此,我们可以像字符串一样读取和存储二进制数据(字节序列)。唯一的区别是我们从二进制文件中读取的字符序列可能无法被人类阅读。

用(读取二进制)标记文件打开格式"rb"以避免文本行结束问题。要处理大文件,您可以一次读取少量字节并在执行过程中计算字节的哈希值。

started = 0
hash_val = 0

with open("video", "rb") as file:
    byte = file.read(1) # read a byte (a single character in text)
    byte_val = ord(byte) # convert the string character into a number

    if started == 0:
        hash_val = byte_val
        started = 1
    hash_val = (hash_val << 5) - hash_val + byte_val # this is a basic hash

print(hash_val)
于 2013-07-16T20:53:17.590 回答