在C#中将3个字节转换为有符号整数

Raf*_*jer 5 c# int byte bytearray

我试图在C#中将3个字节转换为有符号整数(Big-endian).

我试过使用BitConverter.ToInt32方法,但我的问题是什么值应该有lats字节.

任何人都可以建议我怎样才能以不同的方式做到这一点?

我还需要将5(或6或7)个字节转换为有符号长,有什么一般规则怎么做?

在此先感谢您的帮助.

Hen*_*man 9

作为最后的手段,您可以随时移动+添加自己:

byte b1, b2, b3;

int r = b1 << 16 | b2 << 8 | b3;
Run Code Online (Sandbox Code Playgroud)

只需交换b1/b2/b3,直到获得所需的结果.

再想一想,这绝不会产生负面价值.
当msb> = 0x80时,你想要什么结果?


第2部分,暴力标志扩展:

    private static int Bytes2Int(byte b1, byte b2, byte b3)
    {
        int r = 0;
        byte b0 = 0xff;

        if ((b1 & 0x80) != 0) r |= b0 << 24;
        r |= b1 << 16;
        r |= b2 << 8;
        r |= b3;
        return r;
    }
Run Code Online (Sandbox Code Playgroud)

我测试过这个:

      byte[] bytes = BitConverter.GetBytes(p);
      int r = Bytes2Int(bytes[2], bytes[1], bytes[0]);
      Console.WriteLine("{0} == {1}", p, r);
Run Code Online (Sandbox Code Playgroud)

好几个p.