Nibbles Beschreiben

Meldur

Erfahrenes Mitglied
Hallo Leute,


fast ist es mir ein wenig perinlich, aber ich hänge hier total. Ich habe zwei HEX-Zahlen und muss sie in einem Byte - in je einem Nibble - eintragen. Leider habe ich noch nie auf ein Halbbyte in C# (oder überhaupt) zugegriffen. Hat jemand eine kurze Anleiung?

Vielen Dank!
Meldur
 
Hi!

Also wenn du gezielt gewisse Bits aus einer Zahl haben willst, holst du dir diese am Besten mit einer Bitmaske raus.

In deinem Fall, für die Nibbles brauchst du eine, bei der 4 Bits gesetzt sind, also "1111"(binär) was 0xf entspricht.
Wenn du diese Maske mit einer Zahl bitweise Und verknüpfst, erhältst du die ersten 4 bits. Um dann an die nächsten Bits zu kommen, shiftest du die Zahl um 4 nach rechts, und veknüpfst wieder mit der Maske.

Hier ein kleines Beispiel:

C#:
class Program
{
	static void Main(string[] args)
	{
		int number = 2346;
		int mask = 0xf;
		int nibble;

		for (int i = 0; i < 32; i+=4)
		{
			nibble = (number >> i) & mask;

			for (int j = 3; j >= 0; j--)
			{
				Console.Write((nibble >> j) & 0x1);  // Ausgabe des Nibbels in Binärdarstellung
			}
			Console.WriteLine();
		}

		Console.ReadLine();
	}
}

lg,..
 
Hallo,
mein Vorredner hat recht. Du musst mit BitShift und Masken arbeiten. Hier eine einfache Lösung:

Zur Erklärung:

"(zahl_1 << 4)" versetzt die letzten 4 Bit um 4 Bit in die "mitte". Aus 0x0000000a wird 0x000000a0
"& 0x000000f0" ist nur zur Sicherheit , dass auch wirklich jetzt die letzten Bits Nullen sind.
und " | zahl_2 " setzt die 2.Zahl in die letzten 4 bits ein.

C#:
int zahl_1 = 0xa;
int zahl_2 = 0x9;

int  resultat = ((zahl_1 << 4) & 0x000000f0) | zahl_2;

Console.WriteLine(String.Format("{0:X}",resultat));

Gruß
Col.Blake
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück