6

int を ushort に明示的にキャストしようとしていますが、型 'int' を 'ushort' に暗黙的に変換できません

ushort quotient = ((12 * (ushort)(channel)) / 16);

.Net Micro フレームワークを使用しているため、BitConverter は使用できません。そもそも ushort を使用する理由は、データが SPI 経由で送信される方法に関係しています。この特定のエラーがこのサイトで以前に提起されたことは理解できますが、データが失われても気にしないと明示的に宣言しているときに、32 ビットを 16 ビットに切り刻むだけで満足する理由がわかりません。

            public void SetGreyscale(int channel, int percent)
    {
        // Calculate value in range of 0 through 4095 representing pwm greyscale data: refer to datasheet, 2^12 - 1
        ushort value = (ushort)System.Math.Ceiling((double)percent * 40.95);

        // determine the index position within GsData where our data starts
        ushort quotient = ((12 * (ushort)(channel)) / 16); // There is 12 peices of 16 bits

int チャンネルを ushort チャンネルに変更したくありません。どうすればエラーを解決できますか?

4

2 に答える 2

11

(ushort) channelであるushortが、12 * (ushort)(channel)そうなるint場合は、代わりに次のようにします。

ushort quotient = (ushort) ((12 * channel) / 16);
于 2013-09-14T05:36:43.773 に答える
4

any 以下の型の乗算は をint生成しintます。したがって、あなたの場合12 * ushortは が生成されますint

ushort quotient = (ushort)(12 * channel / 16);

上記のコードは元のサンプルと完全に同等ではないことに注意してください - の値が範囲外(0.. 0xFFFF)の場合、 channeltoのキャストによって結果が大幅に変わる可能性があります。重要な場合は、まだインナーキャストが必要です。以下のサンプルは、上記の通常のコード (結果が得られる) とは異なり、 for (問題の元のサンプルが行うこと) を生成します。ushortchannelushort0channel=0x1000049152

ushort quotient = (ushort)((12 * (ushort)channel) / 16); 
于 2013-09-14T05:38:36.093 に答える