4

パケット形式に hdlc を使用するシリアル ポート デバイスをリバース エンジニアリングしようとしています。ドキュメントに基づくと、パケットにはコマンドのビットごとの反転 (最初の 4 バイト) が含まれている必要があります。この場合は"HELO". 元のプログラムを使用しているときにシリアル ポートを監視すると、ビットごとの反転がどうあるべきかがわかります。

 HELO -> b7 ba b3 b0
 READ -> ad ba be bb

問題は、遠く離れていても値が得られないことです。

public object checksum
    {

        get
        {
            var cmdDec = (int)Char.GetNumericValue((char)this.cmd);
            return (cmdDec ^ 0xffffffff);
        }
    }
4

3 に答える 3

1

Charはバイトではありません。文字の代わりにバイトを使用する必要があります。


this.cmdバイトの配列ですか?あなたは使用することができますBitConverter.ToUInt32()

PSEUDO: (いくつかのキャストを修正する可能性があります)

public uint checksum
{
    get
    {
        var cmdDec = BitConverter.ToUInt32(this.cmd, 0);
        return (cmdDec ^ 0xffffffff);
    }
}

文字列の場合this.cmdは、それからバイト配列を取得できますEncoding.UTF8.GetBytes(string)

于 2017-01-09T08:13:32.460 に答える