C# 将2字节转换为有符号整数

C# 将2字节转换为有符号整数,c#,int,C#,Int,他们有没有办法将2个字节转换成有符号整数?我知道我们可以用下面的方法把一个字节转换成有符号整数 byte B1= 0xFF; int r = Convert.ToSbyte((sbyte)B1); 但是2个字节的有符号整数呢?例如-260是0xFC,0xFE如果是一个字节,只需分配: 如果有两个字节-添加移位和赋值: byte B1 = 0xFE; byte B2 = 0xFC; int r = (B1 << 8) | B2; 看一看它的ToInt32()方法 假设第一个字节是

他们有没有办法将2个字节转换成有符号整数?我知道我们可以用下面的方法把一个字节转换成有符号整数

byte B1= 0xFF;
int r = Convert.ToSbyte((sbyte)B1);
但是2个字节的有符号整数呢?例如-260是0xFC,0xFE

如果是一个字节,只需分配:

如果有两个字节-添加移位和赋值:

byte B1 = 0xFE;
byte B2 = 0xFC;

int r = (B1 << 8) | B2;

看一看它的ToInt32()方法

假设第一个字节是msb:

byte b1 = 0xff;
byte b2 = 0xff;
var test = BitConverter.ToInt16(new byte[] { b1, b2 }, 0);
否则:

byte b1 = 0xff;
byte b2 = 0xff;
var test = BitConverter.ToInt16(new byte[] { b2, b1 }, 0);

编辑:“已签名”

将转换为未签名integer@prattomBitConverter.ToInt32:返回从字节数组中指定位置的四个字节转换而来的32位有符号整数。对于例如0xFC,BitConverter不是无符号整数,而是将正整数返回为负整数,如果使用BitConverter类,则0xFE返回为65276,而它应为-260Point32(数组^, Int32)返回从字节数组中指定位置的四个字节转换而来的32位有符号整数。您应该使用它。@prattom这是因为您使用ToInt32只发送了两个字节,int32在dword的最高有效位有它的负位,所以两个字节没有负位,使用ToInt16()如果这是一个通信协议,您需要先知道该结构的endian顺序。此外,2字节有符号整数是.NET中的
(或
Int16
),而不是
int
(即
Int32
)。OP可能需要有符号
Int16
。好的旧二进制运算符,肯定比任何转换器类都有效:)OP可能需要有符号
Int16
byte b1 = 0xff;
byte b2 = 0xff;
var test = BitConverter.ToInt16(new byte[] { b1, b2 }, 0);
byte b1 = 0xff;
byte b2 = 0xff;
var test = BitConverter.ToInt16(new byte[] { b2, b1 }, 0);