javascript - 在 Javascript 和 C++ 中计算 MD5 哈希的不同结果
问题描述
我正在尝试在 Javascript 和 C++ 中计算某个值的 MD5 哈希,但不同的编程语言有时会给出不同的输出。由于它不会经常发生,我猜它与舍入误差有关。
在Javascript中,我计算的值如下:
let calculatedTotal = 0;
blocks.forEach((block) => {
calculatedTotal += Math.floor(block.standard_deviation * 1000);
});
在 C++ 中使用 rapidJson 我正在做:
for (rapidjson::Value::ConstValueIterator j = blocks.Begin(); j != blocks.End(); ++j) {
float val = (*j)["standard_deviation"].GetFloat();
sumToCalculteHashOver += int(std::floor(val * 1000));
}
如 C++ 所示,我使用的是浮点数。
有谁知道这可能是什么原因?
解决方案
感谢@Caramiriel,我设法解决了这个问题。
正如我所预料的那样,这个问题与 C++ 中浮点数的精度有关。
在我的计算中使用整数值是可行的。对我来说,这意味着我需要做出这些改变。
Javascript:
let calculatedTotal = 0;
blocks.forEach((block) => {
calculatedTotal += Math.floor(block.standard_deviation) * 1000;
});
C++:
for (rapidjson::Value::ConstValueIterator j = blocks.Begin(); j != blocks.End(); ++j) {
int val = int(std::floor((*j)["standard_deviation"].GetFloat()));
sumToCalculteHashOver += int(std::floor(val * 1000));
}
推荐阅读
- terraform - terraform depends_on 用于路线 53 区域关联
- linux - 在 Debial Linux 9.5 下通过 ACL 权限设置文件夹/文件的特定权限的问题
- reactjs - 如何在不同的 Vercel 项目中托管 React 应用程序
- python - 有什么办法可以在“x for y in x for z”中获得 x
- kaltura - Kaltura Iframe 嵌入:无法读取 null 的属性“功能”
- html - 混合整个页面
- python - 如何在 Heroku 中终止 Python 机器人
- encryption - 压缩还是加密?
- python - 如何从 Tkinter for Python 3.x 中的 Text 小部件获取段落数据?如何获取用户的段落输入并将数据添加到 CSV 文件?
- android - Button 后不显示 Listview 项