我的作业要求我从视频文件中计算哈希值。所以我猜我需要做什么,就是以某种方式将视频文件作为二进制数据读取,然后用它来做散列恶作剧。问题是,我只知道如何读取和写入.txt文件 - 视频文件对我来说是全新的。所以我的问题是:
如何获取文件并将其作为二进制数据读取?
如何处理这些数据?我的意思是,我应该将其粘贴到字符串中还是应该使用某种数组?我想数字的数量将是巨大的,我不希望我的计算机崩溃,因为我以一种非常低效的方式处理数据:D。
另外,当我说“二进制数据”时,我并不完全确定我在说什么,因为我对这种东西的经验有限。我的意思是,它不仅仅是一串1和0吗?所以我也很欣赏“二进制数据”的速成课程:D
答案 0 :(得分: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)