2

假设我有一个这样定义的字节数组:

byte[] byteArray = { 0x08, 0x00 };

我需要组合数组中的元素来创建:

0x0800

然后将其转换为int:

2048

像这样的东西:

    private static int GetMessageType(byte[] byteArray)
    {
        if(byteArray.Length != 2)
            throw new ArgumentOutOfRangeException("byteArray");

        throw new NotImplementedException();
    }
4

2 回答 2

4

为什么不只使用简单的位运算符?例如

byte hiByte = byteArray[0];  // or as appropriate
byte lowByte = byteArray[1];
short val = (short)((hiByte << 8) | lowByte);

在这种情况下,按位结果被视为 [signed] short(在标题之后?)并且可能导致负值,但可以通过删除强制转换来根据需要更改 ..

于 2012-07-05T22:44:51.373 回答
1

您应该使用BitConverter.ToInt16,除非您似乎需要 BigEndian 转换。所以使用 Jon Skeet 的EndianBitConverterhttp ://www.yoda.arachsys.com/csharp/miscutil/

于 2012-07-05T22:30:58.633 回答