0

私は、シリアルポートを介してArduinoにデータを送信する私のプロジェクトに単純な制御CRCを行っています。

メッセージの CRC を計算しようとしています: A0h 45h 11h 83h または 69d 17d 160d 131d

文字列に変換すると、計算するメッセージが表示されます: "Eá◄â" ASCII に変換すると、次の結果が返されます: 69d 63d 63d 63d

なぜこれが起こったのですか?コードは以下です

tks

public byte CalculateCRC(string data)
{
    data = "Eá◄â";
    byte[] characters = new byte[System.Text.Encoding.ASCII.GetByteCount(data)];
    characters = System.Text.Encoding.ASCII.GetBytes(data);

    byte result = 0;
    foreach (byte character in characters )
        result = (byte)(result + character);
    result = (byte)(result + 1);
    return result;
}
4

2 に答える 2

2

エンコーディング Latin1 別名 ISO-8859-1 別名 CP28591が必要な場合があります。

このエンコーディングは、0 ~ 255 の範囲の 16 進値を持つすべてのバイトを、同じ 16 進値を持つ Unicode 文字にマップします。値をシリアル ポートに送信するラウンドトリップに便利です。

于 2013-11-05T13:32:02.473 に答える
2

Encoding.ASCII プロパティ:

ASCII 文字は、U+0000 から U+007F までの最下位 128 の Unicode 文字に制限されています。

A0h 45h 11h 83hしたがって、入力または文字列に変換しないでください69d 17d 160d 131d。ただし、そこからバイト配列を作成してください。

于 2013-11-05T13:25:22.387 に答える