0

与えられたバイト配列

byte[] someBytes = { 0xFF, 0xFE, 0xFE, 0xFF, 0x11, 0x00 ,0x00 ,0x00 ,0x00}

すべてのバイトを合計するのに最適なものは何ですか? すべてのバイトを手動で 16 進数として手動で追加すると、上記の例では 40B になるため、できれば次のような結果になりたいと考えています。

byte[] byteSum = { 0x04, 0x0B }

実際、本当に必要なのは 0x0B 部分 (チェックサムに使用) だけです。この場合、チェックサムは 0x0B XOR 0x55 (これにより 0x5E が生成されます) によって計算されます。

これは通常のバイトの追加ではないことは理解していますが、これがチェックサムの計算方法です。

バイト配列を手動でループしてそれらを追加すると、整数の合計が得られます。

これを行う最も簡潔な方法は何ですか?

4

3 に答える 3

2

あなたの質問を理解しているかどうかわかりません...しかし、これは私がそれを行う方法です:

byte sum = 0;
foreach (byte b in someBytes)
{
    unchecked
    {
        sum += b;
    }
}

しかし、これは 0x0B ではなく 0x69 を生成します。

于 2013-07-11T08:47:22.540 に答える
1

最後にLINQの合計とキャストを使用するbyte

unchecked
{
    var checksum = (byte)(someBytes.Sum(b => (long)b) ^ 0x55);
}
于 2013-07-11T10:58:05.667 に答える