2016-06-16 3 views
0

私は(Cと非常によく似ています)CAPLでこれをやっている動作しません。私はバイト中の可変位置にビットの束を設定していますし、それが正しく

data[i] = (data[i] & (~mstart)) + (z_Checksum_ldu8[i] & mstart); 
data[i] has the value 0x20 and z_Checksum_ldu8[i] is 0x0C 
mstart is 0x0F 
desired result is 0x2C 
actual result is 0x0C 

データ[]とy_Checksum_ldu8ながらの[]はタイプ "byte"で、mstartもバイト(ビットマスクとして使用)です。 コードの残りの部分は重要ではありません。なぜなら、デバッガでその結果を見ることができるからです。そして、私が見ているものは私が望むものではありません!


まず、どうして私はこれをやっていますか?

  • 私は操作が
を終了した後、[i]は同じである必要があります
  • LSB-ニブルチェックサム変数の値に正確にデータのMSB-ニブルをLSB-ニブルを設定したいです

    しかし、これは私の疑問ではありません。私の欠点はどこですか?msb-nibbleは毎回0x0に設定されていますか?それは100%確信しています。このコード行を実行した直後にデバッガの値が0x0X(チェックサムではX)に変わるのがわかります。

  • +0

    'data'がバイトの場合、' data [i] 'はどのようにニブルになりますか? – CinCout

    +0

    あなたの 'mstart = 0xf'を推測しますか?あなたは 'data [i] =(data [i]&〜0xf)| (z_Checksum_ldu8 [i] & 0xf); '? –

    +0

    data [i]は0x00バイト、lsbニブルは0x0X、msbニブルは0xX0 であり、mstartは0x0Fです。解決策を試します –

    答えて

    0

    どちらのタイプも符号なしですが、| +ではない。

    関連する問題