开发者

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

开发者 https://www.devze.com 2023-01-09 15:07 出处:网络
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 th

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号