我试图明确地将一个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频道,也不要改用频道。我该如何解决错误?
答案 0 :(得分:8)
(ushort) channel
为ushort
但12 * (ushort)(channel)
为int
,请执行此操作:
ushort quotient = (ushort) ((12 * channel) / 16);
答案 1 :(得分:4)
任何int
和更小类型的乘法产生int
。因此,在您的情况下,12 * ushort
会生成int
。
ushort quotient = (ushort)(12 * channel / 16);
请注意,上面的代码并不完全等同于原始样本 - 如果channel
的值超出ushort
范围,则channel
到ushort
的强制转换可能会显着改变结果(0 .. 0xFFFF)。如果它很重要你仍然需要内部演员。下面的示例将为0
生成channel=0x10000
(这是相关的原始示例),而不像上面更常规的代码(这会产生49152
结果):
ushort quotient = (ushort)((12 * (ushort)channel) / 16);