I have 2 bytes:
byte b1 = 0x5a;
byte b2 = 0x25;
How do I get 0x5a25
?
I have 2 bytes:
byte b1 = 0x5a;
byte b2 = 0x25;
How do I get 0x5a25
?
Using bit operators:
(b1 << 8) | b2
or just as effective (b1 << 8) + b2
byte b1 = 0x5a;
byte b2 = 0x25;
Int16 x=0;
x= b1;
x= x << 8;
x +=b2;
It can be done using bitwise operators '<<' and '|'
public int Combine(byte b1, byte b2)
{
int combined = b1 << 8 | b2;
return combined;
}
Usage example:
[Test]
public void Test()
{
byte b1 = 0x5a;
byte b2 = 0x25;
var combine = Combine(b1, b2);
Assert.That(combine, Is.EqualTo(0x5a25));
}
A more explicit solution (also one that might be easier to understand and extend to byte to int i.e.):
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit)]
struct Byte2Short {
[FieldOffset(0)]
public byte lowerByte;
[FieldOffset(1)]
public byte higherByte;
[FieldOffset(0)]
public short Short;
}
Usage:
var result = (new Byte2Short(){lowerByte = b1, higherByte = b2}).Short;
This lets the compiler do all the bit-fiddling and since Byte2Short is a struct, not a class, the new does not even allocate a new heap object ;)