- ベストアンサー
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
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
^= はサムですから +=の間違いなんでしょうね。 変数のキャストが抜けています。 sum += (int) Tx[ i ]; Tx[ 22 ] = (char) sum; あと、SUM = 0 と明示的に初期化しましょう。
その他の回答 (1)
- bikkuri
- ベストアンサー率33% (23/68)
回答No.1
なにが上手くいかないのか不明ですが、 sum ^= Tx[i]; とあるので、 char(8bit)のxorをいくらやっても、答えは8bitにしかなりません。 よって、Tx[21]は常に0が入っていると思います。 もしかして、sum += Tx[i]の間違い?
質問者
お礼
そのとうりです。回答有難う御座いました。
お礼
そのとうりです。回答有難う御座いました。