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 ordered from LSB to MSB. So in the example below, 39 is the LSB and 2 is the MSB.
var data = new byte[] { 39, 213, 开发者_如何学Go2 };
In the example above how can I take those bytes and convert to a number (int,short,etc)?
var num = data[0] + (data[1] << 8) + (data[2] << 16);
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.
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.
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());
精彩评论