Как я связываю 2 байта?

У меня есть 2 байта:

byte b1 = 0x5a;  
byte b2 = 0x25;

Как я добираюсь 0x5a25 ?

10
задан Peter Mortensen 20 December 2009 в 17:53
поделиться

6 ответов

Вопрос немного двусмысленный.

Если бы байтовый массив был простым: байт[] 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.

.
0
ответ дан 3 December 2019 в 13:17
поделиться

Более явное решение (также более понятное и расширяющееся до байта в 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 - это структура, а не класс, то новый даже не выделяет новую кучу объектов ;)

.
5
ответ дан 3 December 2019 в 13:17
поделиться

Это можно сделать с помощью битовых операторов '<<' и '|'

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));
}
36
ответ дан 3 December 2019 в 13:17
поделиться

Использование битовых операторов: (b1 << 8) | b2 или так же эффективно (b1 << 8) + b2

17
ответ дан 3 December 2019 в 13:17
поделиться
byte b1 = 0x5a;
byte b2 = 0x25;

Int16 x=0;

x= b1;
x= x << 8;
x +=b2;
.
1
ответ дан 3 December 2019 в 13:17
поделиться

Самым простым было бы

b1*256 + b2
0
ответ дан 3 December 2019 в 13:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: