簡體   English   中英

在 Javascript 和 C++ 中計算 MD5 哈希的不同結果

[英]Different outcome calculating MD5 hash in Javascript and C++

我試圖在 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));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM