簡體   English   中英

如何比較 c# 中邏輯上相等但技術上不相等的字節數組( byte[] )?

[英]How to compare logically equal, but technically unequal byte-arrays ( byte[] ) in c#?

我有兩個需要比較的大字節數組 (byte[])。 它們在邏輯上應該相等,但在技術上並不總是相等。 原因是這兩個 arrays 中浮點數的表示方式不同。

有沒有辦法通過識別浮點數並測試這些數字是否在容錯范圍內來比較這些?

我懷疑這種情況是由於這些字節數組之一已被存儲並從數據庫(postgres)中檢索到的。

到目前為止,我比較了兩個字節 arrays ,如下所示:

public static bool AreEqual(byte[] a, byte[] b)
{
    if (a.Length == b.Length)
    {
        for (var i = 0; i < a.Length; ++i)
        {
            if (a[i] != b[i])
            {
                return false;
            }
        }
    }

    return true;
}

(最初我序列化為 JSON,但我遇到了同樣的問題。認為序列化為字節可以解決這個問題,但沒有)。

首先,您需要將字節 arrays 轉換為浮動 arrays,如果這就是它們所代表的。 您可以使用二進制閱讀器,也可以將數組轉換為跨度, 對其進行強制轉換,然后將結果復制到新數組。

對於比較 Linq 有一個SequenceEquals方法來比較所有單獨的值,並允許相等比較器指定如何進行比較。

在閱讀了應該如何比較浮點數之后,您需要自己實現這個相等比較器。 請參閱浮點指南以及如何比較浮點數

暫無
暫無

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

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