У меня есть 2 байта:
byte b1 = 0x5a;
byte b2 = 0x25;
Как я добираюсь 0x5a25
?
Вопрос немного двусмысленный.
Если бы байтовый массив был простым: байт[] myarray = новый байт[2]; myarray[0] = b1; myarray[1] = b2; и сериализовать byearray...
или если вы пытаетесь сделать что-то вроде запихивания этих 16 бит в int или что-то подобное, вы можете изучить свои битовые операторы на c#.... http://en.wikipedia.org/wiki/Bitwise_operation#Bit_shifts
сделать что-то подобное:
байт b1 = 0x5a; байт b2 = 0x25; int foo = ((int) b1 << 8) + (int) b2;
теперь ваш int foo = 0x00005a25.
.Более явное решение (также более понятное и расширяющееся до байта в int т.е.):
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit)]
struct Byte2Short {
[FieldOffset(0)]
public byte lowerByte;
[FieldOffset(1)]
public byte higherByte;
[FieldOffset(0)]
public short Short;
}
Использование:
var result = (new Byte2Short(){lowerByte = b1, higherByte = b2}).Short;
Это позволяет компилятору делать всю работу с битами, а так как Byte2Short - это структура, а не класс, то новый даже не выделяет новую кучу объектов ;)
.Это можно сделать с помощью битовых операторов '<<' и '|'
public int Combine(byte b1, byte b2)
{
int combined = b1 << 8 | b2;
return combined;
}
Пример использования:
[Test]
public void Test()
{
byte b1 = 0x5a;
byte b2 = 0x25;
var combine = Combine(b1, b2);
Assert.That(combine, Is.EqualTo(0x5a25));
}
Использование битовых операторов:
(b1 << 8) | b2
или так же эффективно (b1 << 8) + b2
byte b1 = 0x5a;
byte b2 = 0x25;
Int16 x=0;
x= b1;
x= x << 8;
x +=b2;
.