简体   繁体   中英

How do you convert 3 bytes into a 24 bit number in C#?

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, 2 };

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());

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM