无法将类型'int'隐式转换为'ushort':已经显式转换

时间:2013-09-14 05:32:35

标签: c# .net-micro-framework

我试图明确地将一个int转换为一个ushort,但是我得到的不能将'int'转换为'ushort'

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

我正在使用.Net Micro框架,因此BitConverter不可用。为什么我首先使用ushort与我的数据如何通过SPI发送有关。我可以理解这个特殊的错误已经在这个网站上提出但我不明白为什么当我明确表示我不在乎是否有任何数据丢失时,只需将32位切成16位即可,我会很高兴。 / p>

            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频道,也不要改用频道。我该如何解决错误?

2 个答案:

答案 0 :(得分:8)

(ushort) channelushort12 * (ushort)(channel)int,请执行此操作:

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

答案 1 :(得分:4)

任何int和更小类型的乘法产生int。因此,在您的情况下,12 * ushort会生成int

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

请注意,上面的代码并不完全等同于原始样本 - 如果channel的值超出ushort范围,则channelushort的强制转换可能会显着改变结果(0 .. 0xFFFF)。如果它很重要你仍然需要内部演员。下面的示例将为0生成channel=0x10000(这是相关的原始示例),而不像上面更常规的代码(这会产生49152结果):

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