I have an array of bytes that I read from a header section of a message. These bytes contain the length of the message. There never are more than 3 bytes and they are ordere
Use methods like BitConverter.ToInt32, but realize that you'll need 4 bytes for 32 bit quantities.
var data = new byte[] {39, 213, 2, 0};
int integer = BitConverter.ToInt32(data, 0);
There are also other methods to convert to and from other types like Single and Double.
var num = data[0] + (data[1] << 8) + (data[2] << 16);
BitConverter handles the endianness for you which is why it's the way to go.
While you need 4 bytes, do
BitConverter.ToInt32(new byte[1] { 0 }.Concat(yourThreeByteArray).ToArray());
Use the Left-shift operator and the or operator:
int d = (data[2] << 16) | (data[1] << 8) | data[0]
Obviously, you could do all sorts of things here, like using a loop etc :)
Something like this should work:
data[0] + 256*data[1] + 256*256*data[2]
Your compiler should optimize that to the 'right' bit twiddling operations.