c#将2个字节转换为int值

c#将2个字节转换为int值,c#,arrays,C#,Arrays,首先,我读了很多文章,并尝试了位转换器的转换方法,但我没有得到理想的结果。 从以下内容的2字节数组: byte[] dateArray = new byte[] { 0x07 , 0xE4 }; Y需要得到一个值为2020的整数。所以,0x7E4的小数点 以下方法不返回所需的值 int i1 = BitConverter.ToInt16(dateArray, 0); endianess告诉您数字是如何存储在计算机上的。有两种可能性:小端和大端 Big-endian表示首先存储最大字节,即20

首先,我读了很多文章,并尝试了位转换器的转换方法,但我没有得到理想的结果。 从以下内容的2字节数组:

byte[] dateArray = new byte[] { 0x07 , 0xE4 };
Y需要得到一个值为2020的整数。所以,0x7E4的小数点

以下方法不返回所需的值

int i1 = BitConverter.ToInt16(dateArray, 0);

endianess告诉您数字是如何存储在计算机上的。有两种可能性:小端和大端

Big-endian表示首先存储最大字节,即2020将变成0x07、0xE4。 Little endian表示首先存储最低字节,即2020将变为0xE4、0x07

大多数计算机都是小端的,因此人类所期望的是另一种方式。使用
BitConverter.IsLittleEndian
,您可以检查您的计算机具有哪种类型的Endian。您的代码将变成:

byte[]dateArray=新字节[]{0x07,0xE4};
if(位转换器.IsLittleEndian)
{
Array.Reverse(dataArray);
}
int i1=BitConverter.ToInt16(日期数组,0);

endianess告诉您数字是如何存储在计算机上的。有两种可能性:小端和大端

Big-endian表示首先存储最大字节,即2020将变成0x07、0xE4。 Little endian表示首先存储最低字节,即2020将变为0xE4、0x07

大多数计算机都是小端的,因此人类所期望的是另一种方式。使用
BitConverter.IsLittleEndian
,您可以检查您的计算机具有哪种类型的Endian。您的代码将变成:

byte[]dateArray=新字节[]{0x07,0xE4};
if(位转换器.IsLittleEndian)
{
Array.Reverse(dataArray);
}
int i1=BitConverter.ToInt16(日期数组,0);

dateArray[0]
dateArray[0]这不是2020年。字节是反向的。2020是
0x07E4
,而数组将
0x07
存储在较低的字节中-这是
0xE407
,您需要反向编辑:示例在bitconverter文档中可能是系统的端号问题。您可以尝试
inti1=BitConverter.ToInt16(dateArray.Reverse().ToArray(),0)
inti1=dateArray[0]这不是2020年。字节是反向的。2020是
0x07E4
,而数组将
0x07
存储在较低的字节中-这是
0xE407
,您需要反向编辑:示例在bitconverter文档中可能是系统的端号问题。您可以尝试
inti1=BitConverter.ToInt16(dateArray.Reverse().ToArray(),0)
int i1=dateArray[0]虽然此代码可能会回答此问题,但提供有关如何和/或为什么解决此问题的其他上下文将提高答案的长期价值。谢谢。如果我颠倒顺序,dateArray[1],这段代码可能会回答这个问题,提供关于它如何和/或为什么解决这个问题的额外上下文,将提高答案的长期价值。谢谢。如果我颠倒顺序,dateArray[1]工作得很好,谢谢你的回答,也谢谢你对little endian的解释。真的很好,谢谢你的回答,也谢谢你对little endian的解释。非常感谢
dateArray[0] << 8 | dateArray[1]