Python 代码转换为 Javascript 运算结果不一致

查看 71|回复 6
作者:f360family123   
def cid_hash_file(path):
    h = hashlib.sha1()
    size = os.path.getsize(path)
    with open(path, 'rb') as stream:
        if size
上面的代码用 chatGPT 转换后是这样的
function cidHashFile(path) {
  const h = crypto.createHash('sha1');
  const size = fs.statSync(path).size;
  const stream = fs.createReadStream(path);
  if (size  {
      h.update(chunk);
    });
  } else {
    stream.on('data', (chunk) => {
      if (stream.bytesRead = Math.floor(size / 3) && stream.bytesRead = size - 0x5000) {
        h.update(chunk);
      }
    });
  }
  stream.on('end', () => {
    const result = h.digest('hex').toUpperCase();
    console.log(result);
  });
  stream.on('error', (err) => {
    console.error('File reading error:', err);
  });
}
试了不同文件计算出来的 hash 不一致,有没有大佬知道原因的?
使用 ChatGPT 转换的
galikeoy   
使用 ChatGPT 转换的
kneo   
stream.seek 是连续的,createReadStream 流的 bytesRead 属性是无序的?
est   
第一个算法是取样,只读常数长度的数据。
第二个算法把所有数据都读了,首先效率应该就很差。然后文件位置的判断也不对,完全不是一个东西。
你再问一下 AI 应该就行了。
paopjian   
建议标题加上 chatgpt
f360family123
OP
  
不懂 python,但是如果要 debug,不如先不用 0x5000 这种特殊数字,直接全读文件再看结果. 不过你这是取了文件的 0 1/3 2/3 处位置的代码再计算 sha1? 我记得读文件的代码好像可以直接定位位置吧, 你这样是把文件全读了一遍吧, 性能不好
kneo   
@kneo 还真是,又问了一下就行了。已感谢
您需要登录后才可以回帖 登录 | 立即注册

返回顶部