首页 > 解决方案 > 在 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++ 所示,我使用的是浮点数。

有谁知道这可能是什么原因?

标签: javascriptc++

解决方案


感谢@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));
}

推荐阅读