我有一个16位签名号码来自硬件。我想将其加入Int32
。
当我将其转换为short
时,它会在数字为负时偶尔运行。但大多数时候,我得到first chance exception of type 'System.OverflowException' occurred
。
这是我的代码:
int M1;
M1 = (short)(INBuffer[3] << 8) + INBuffer[2];
如何在C#中将16位短整数转换为32位整数?
答案 0 :(得分:2)
假设INBuffer
是一个字节数组,您可以安全地转换为ushort
而不是short
。这是因为如果高阶字节的最高位为1,则一旦有位移位,该值对于有符号短路来说太大了。
在您的情况下,如果您想要int
,则根本不需要投射 - 位移输出int
,并且byte
的添加再次留下{{ 1}} - 你已经在那里......