dポイントプレゼントキャンペーン実施中!

下記のように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

A 回答 (2件)

^= はサムですから +=の間違いなんでしょうね。



変数のキャストが抜けています。
sum += (int) Tx[ i ];
Tx[ 22 ] = (char) sum;

あと、SUM = 0 と明示的に初期化しましょう。
    • good
    • 1
この回答へのお礼

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

お礼日時:2003/10/14 19:13

なにが上手くいかないのか不明ですが、


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

もしかして、sum += Tx[i]の間違い?
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/10/14 19:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!