Wątek przeniesiony 2014-01-28 12:27 z C# i .NET przez ŁF.

Wypełnianie tablicy bajtów i operacje na bitach

0

Witam
główkuję nad takim problemem
mam tablicę bajtów buffer[] szykuję funkcję która zapisze mi 3 inne tablice np Rbuffer Gbuffer i Ybuffer 2 razy dłuższe.
wypełniać się powinny w ten sposób Rbuffer jeśli w tablicy wejściowej w bajcie znajduje się bit 1 to zamienia go na 2 bity 10 i tak z bajtu np 1011111 otrzymam 2 bajty 10001010 10101010
Gbuffer 1 zaminia na 01 a Y na 11
Rozwiązaniem była by tablica bitów lub jakaś logika na bajtach ale nic nie przychodzi mi do głowy

1

Nie może być bajtu 1011111, może być 01011111 albo 10111110, gdzieś to zero musisz umieścić.
A co się dzieje gdy na wyjściu liczba bitów nie jest wielokrotnością ośmiu?
Jeśli masz na wyjściu tylko 11, to robi się z tego 00000011 czy 11000000?

Masz gdzieś opis tego kodowania?

1

Zamien tablice bajtow na BitArray (http://msdn.microsoft.com/en-us/library/system.collections.bitarray(v=vs.100).aspx).
Wykonaj na niej co chcesz i skonwertuj do interesującego Cię typu wyjściowego.

2

Tutaj masz dla RBuffer. Dla pozostałych na pewno poradzisz sobie sam :-)

			byte input = 7;
			ushort output = 0;

			for (int i = 0; i < 8; i++)
			{
				var bit = input >> i & 1; // pobranie i-tego bitu inputu
				var shift = i * 2 + 1; // który bit wyniku ustawić
				output |= (ushort)(bit << shift); // ustawienie i*2-tego bitu wyniku, jeśli bit=1, jeśli zmienna bit=0 pozostawienie bitu bez zmian, czyli=0

				// w skrócie:
				output |= (ushort)(((input >> i) & 1) << (i << 1 + 1));
			}
0

Dzięki o to chodziło
Azarien racja zgubiłem bicik

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