0

デバイスがあり、ユーザーが GUI で設定する値がいくつかあります。それは次のようになり630 330ます。これらの値を I2C バイトに渡す必要があります。58302 47は 16 進ビットになります。これは 2 バイトの変数になりSet(byte lower ,byte upper)、int または double 値を 2 バイトに変換するために呼び出す必要があります。

私は試した :

            ushort R1x = (ushort)Rx;
            byte upper = (byte)(R1x >> 8);
            byte lower = (byte)(R1x & 0xff);

私が必要としていたのは、lower = 47 と upper = 02 です。

これは与えることlower = 0であり、upper = 247..私が間違っていることを知っているかもしれません

4

1 に答える 1

1

は 16 ビット値であり、8 ビットに適合するため、lower = 0upper = 247forを与えることができます。そのため、上位 8 ビットはゼロ (247 を保持する必要はありません) であり、下位ビットは整数 (247 または2 進数) を保持しています。Rx = 247ushort24700000000 11110111

ゼロ以外の上位ビットを与える最初の数値は 256 ( 00000001 00000000) です。

upper = 1
lower = 0

プロセスをupper = 47逆にする必要があるため、8 ビットの 2 進数として書きましょう00101111。次に、これらの 8 ビットを 16 ビット数の上位ビットとして配置します00101111 00000000。あなたが望むのでlower = 2、右の 8 ビットに 2 を入れる必要があります。これにより00101111 00000010、10 進数の 12034 に等しい 2 進数が得られます。

何を達成しようとしているのかはわかりませんが、提供したコードでRx = 12034は、上限と下限を希望どおりにする唯一の可能性があります。したがって、それがプロトコルに合わない場合は、どこかで間違いを犯しています。

于 2013-10-24T11:28:51.393 に答える