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もバイト(ビットマスクとして使用)です。 コードの残りの部分は重要ではありません。なぜなら、デバッガでその結果を見ることができるからです。そして、私が見ているものは私が望むものではありません!
まず、どうして私はこれをやっていますか?
- 私は操作が
しかし、これは私の疑問ではありません。私の欠点はどこですか?msb-nibbleは毎回0x0に設定されていますか?それは100%確信しています。このコード行を実行した直後にデバッガの値が0x0X(チェックサムではX)に変わるのがわかります。
'data'がバイトの場合、' data [i] 'はどのようにニブルになりますか? – CinCout
あなたの 'mstart = 0xf'を推測しますか?あなたは 'data [i] =(data [i]&〜0xf)| (z_Checksum_ldu8 [i] & 0xf); '? –
data [i]は0x00バイト、lsbニブルは0x0X、msbニブルは0xX0 であり、mstartは0x0Fです。解決策を試します –