• ベストアンサー

4バイトでのサムチェックコード作成プログラミング

下記のようにTx[1]からTx[19]までのサムチェックコードを Tx[21](上位)、Tx[22](下位)に格納したいのですが上手くいきません。記述の訂正点やもっと良い方法があったら教えて下さい。 unsigned char Tx[30]; unsigned int sum; for( i = 1; i < 20; i++ ) // サムチェックコード作成 sum ^= Tx[ i ]; Tx[ 22 ] = sum; //23 サムチェックコード2 sum = sum >> 8; Tx[ 21 ] = sum; //22 サムチェックコード1

質問者が選んだベストアンサー

  • ベストアンサー
  • kabasan
  • ベストアンサー率44% (264/588)
回答No.2

^= はサムですから +=の間違いなんでしょうね。 変数のキャストが抜けています。 sum += (int) Tx[ i ]; Tx[ 22 ] = (char) sum; あと、SUM = 0 と明示的に初期化しましょう。

natsumidesu
質問者

お礼

そのとうりです。回答有難う御座いました。

その他の回答 (1)

  • bikkuri
  • ベストアンサー率33% (23/68)
回答No.1

なにが上手くいかないのか不明ですが、 sum ^= Tx[i]; とあるので、 char(8bit)のxorをいくらやっても、答えは8bitにしかなりません。 よって、Tx[21]は常に0が入っていると思います。 もしかして、sum += Tx[i]の間違い?

natsumidesu
質問者

お礼

そのとうりです。回答有難う御座いました。

関連するQ&A