Ucinanie bitów

0

Wie ktoś może, czy jest w C# jakiś sposób aby przerobić tablicę byte'ów na integera ale obcinając przy tym pierwszy bit z każdego bajtu? Np. żeby dla 10010110 01001011 zwracało 2891? Z góry dziękuję za pomoc.

0

Trzeba zrobic petle i obcinajac pierwszy bit skonwertowac na integera.

0

jak to przerobić tablicę byte'ów na integera? rozumiem że tablica ma być stałej szerokości 4 bajtów? wytłumacz lepiej

w każdym razie ucięcie pierwszego bitu (w sensie najbardziej znaczącego):

byte & 0x7f

bo 0x7f to 01111111, a:

  abcdefgh
& 01111111
  --------
  0bcdefgh

zestawienie dwóch bajtów w jedną liczbę

(byte1 << 8) | byte2

w Twoim przypadku trzeba przesunąć o 7 bitów, czyli

((byte1 & 0x7f) << 7) | (byte2 & 0x7f)

czyli jeśli dobrze zrozumiałem całość ma wyglądać tak:

byte[] bajty = new byte[4] { 52, 233, 79, 122 };
int liczba = ((bajty[0] & 0x7f) << 21) | ((bajty[1] & 0x7f) << 14) | ((bajty[2] & 0x7f) << 7) | (bajty[3] & 0x7f);
0

A nie da się wykorzystać klasy BitConverter?

0
somekind napisał(a)

A nie da się wykorzystać klasy BitConverter?

powiedz mi jak chcesz tu wykorzystać klasę BitConverter, która ma zaledwie parę prostych metod

jedyne wyjście używając (na siłę) BitConverter jakie mi przychodzi do głowy to:

byte[] bajty = new byte[4] { 52, 233, 79, 122 };


bajty[3] &= 0x7f;
bajty[3] |= (bajty[2] & 1) << 7;
bajty[2] &= 0x7f;
bajty[2] >>= 1;
bajty[2] |= (bajty[1] & 1) << 6;
bajty[2] |= (bajty[1] & 2) << 7;
bajty[1] &= 0x7f;
bajty[1] >>= 2;
bajty[1] |= (bajty[0] & 1) << 5;
bajty[1] |= (bajty[0] & 2) << 6;
bajty[1] |= (bajty[0] & 4) << 7;
bajty[0] &= 0x7f;
bajty[0] >>= 3;

int liczba = BitConverter.ToInt32(bajty, 0);

nie wydaje mi się ani bardziej intuicyjne ani krótsze

1 użytkowników online, w tym zalogowanych: 0, gości: 1