15

検査情報システム用の計測器ドライバを開発しています。フレームのチェックサムの計算方法を知りたい。

チェックサムアルゴリズムの説明:

  1. [0-9]と[AF]の文字で表されます。

  2. [STX]の後から[ETB]または[ETX]までの文字([ETB]または[ETX]を含む)がバイナリで追加されます。

  3. 16進コードの最下位8ビットを表す2桁の数字は、ASCII文字[0-9]および[AF]に変換されます。

  4. 最上位桁はCHK1に格納され、最下位桁はCHK2に格納されます。

上記の3番目と4番目のポイントを取得していません。

これはサンプルフレームです:

<STX>2Q|1|2^1||||20011001153000<CR><ETX><CHK1><CHK2><CR><LF>

CHK1との値は何CHK2ですか?与えられたアルゴリズムをC#で実装するにはどうすればよいですか?

4

3 に答える 3

19

最後に答えが得られました。チェックサムを計算するためのコードは次のとおりです。

private string CalculateChecksum(string dataToCalculate)
{
    byte[] byteToCalculate = Encoding.ASCII.GetBytes(dataToCalculate);
    int checksum = 0;
    foreach (byte chData in byteToCalculate)
    {
        checksum += chData;
    }
    checksum &= 0xff;
    return checksum.ToString("X2");
}
于 2012-07-02T12:14:24.993 に答える
1

これは1行で実行できます。

return Encoding.ASCII.GetBytes(dataToCalculate).Aggregate((r, n) => r += n).ToString("X2");
于 2019-10-29T22:53:00.477 に答える
-4
private bool CheckChecksum(string data)
{
   bool isValid =false

   byte[] byteToCalculate = Encoding.ASCII.GetBytes(dataToCalculate);
   int checkSum = 0;
   for ( int i=i i<byteToCalculate.Length;i++)
   {
      checkSum += byteToCalculate[i];
   }
   checksum &= 0xff;

  if (checksum == byteToCalculate[ChecksumPlace]
  {
   return true
  }
  else
  {
  return  false
  }
}
于 2015-06-11T07:34:59.220 に答える