Laden...

Umwandeln von Dezimalzahlen in Hexadezimal- oder Binärzahlen?

Erstellt von sublime vor 18 Jahren Letzter Beitrag vor 18 Jahren 32.012 Views
S
sublime Themenstarter:in
34 Beiträge seit 2005
vor 18 Jahren
Umwandeln von Dezimalzahlen in Hexadezimal- oder Binärzahlen?

Moin,

es geht sich diesmal um folgendes =) :

Ich habe eine Textdatei mit verschiedenen Dezimalzahlenwerten. Diese wird von einem Programm eingelesen und je nach übergebenem Parameter sollen die Zahlen in das binäre oder hexadezimale Zahlensystem umgewandelt werden. Dazu habe ich folgenden Case:

					while ((line = sr.ReadLine()) != null) 
					{
						switch (iParam)
						{
							case "B":
								break;

							case "H":
								break;

							case "D":
								break;

							default:
								break;
							
						}
						sw.WriteLine(line);
					}

Jetzt fehlen mir jedoch jeweils die Befehle um die entsprechende Umwandlung vorzunehmen. Gibt es da eine Funktion für in C# die mein Problem löst?

Vielen Dank schonmal für eure Hilfe.

'Ich sag ja immer: "Wer nicht mit der Zeit geht, der muss halt mir der Zeit gehen ne...!"'

2.082 Beiträge seit 2005
vor 18 Jahren

Das gleiche hab ich auch mal gemacht. Dazu hab ich fertige Funktionen im Netz gefunden. Google doch mal oder schau bei CodeProject nach

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

4.221 Beiträge seit 2005
vor 18 Jahren

Wieso einfach wenn es auch kompliziert geht 😁

Convert.ToString(DeinWert,2) --> ergibt binär
Convert.ToString(DeinWert,16) --> ergibt hex

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

S
sublime Themenstarter:in
34 Beiträge seit 2005
vor 18 Jahren

Original von Programmierhans
Wieso einfach wenn es auch kompliziert geht 😁

Convert.ToString(DeinWert,2) --> ergibt binär
Convert.ToString(DeinWert,16) --> ergibt hex

Mhmm hat leider nicht funktioniert. Gab nen Format Error. Habs jetzt folgendermaßen gelöst:

Dezimal --> Binär:

								uint iAnz = Convert.ToUInt32(iLine);
string iErgebnis = "";
uint iRest;
while (iAnz > 0) 
	{							
    iRest = iAnz % 2;
	iErgebnis = iRest.ToString() + iErgebnis;
	iAnz = iAnz / 2; 
	}
iLine = iErgebnis;

Dezimal --> Hexadezimal:

								iLine = Convert.ToInt32(iLine).ToString("X");

'Ich sag ja immer: "Wer nicht mit der Zeit geht, der muss halt mir der Zeit gehen ne...!"'

2.082 Beiträge seit 2005
vor 18 Jahren

Convert.ToString(value, 16); funktioniert eigentlich. Da musst du was falsch gemacht haben.

Gibt es eigentlich auch eine Möglichkeit, von einem Format zurück auf die Basis zu kommen?

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

S
sublime Themenstarter:in
34 Beiträge seit 2005
vor 18 Jahren

Original von frisch
Convert.ToString(value, 16); funktioniert eigentlich. Da musst du was falsch gemacht haben.

Gibt es eigentlich auch eine Möglichkeit, von einem Format zurück auf die Basis zu kommen?

Ich bekomm da "C:\Laden\Laden\Class1.cs(86): Argument '2': cannot convert from 'int' to 'System.IFormatProvider'".

Die Rückrechenmöglichkeit ist meine Nächste Aufgabe im Endeffekt möchte ich von Dezimal, Hexadezimal und Binär in Dezimal, Hexadezimal und Binär kommen.

'Ich sag ja immer: "Wer nicht mit der Zeit geht, der muss halt mir der Zeit gehen ne...!"'

S
sublime Themenstarter:in
34 Beiträge seit 2005
vor 18 Jahren

So also mit:

								uiHex = Convert.ToUInt32(iLine, 16);
iLine = uiHex.ToString();

Gehts von hexadezimal zurück zu dezimal und folglich mit:

								uiBin = Convert.ToUInt32(iLine, 2);
iLine = uiBin.ToString();

von binär zu dezimal und von Dezimal aus kommt man ja wieder überall hin. =)

'Ich sag ja immer: "Wer nicht mit der Zeit geht, der muss halt mir der Zeit gehen ne...!"'

2.082 Beiträge seit 2005
vor 18 Jahren

Ich bin mir nicht sicher, ob das umwandeln von dec in hex mit ints funktioniert. Geh lieber mal auf nummer sicher und machst so:

string Hex = Convert.ToString(iLine.ToString, 16);

So müssts auf jeden Fall gehen.

Von hex zu dec ist nicht so einfach.

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

S
sublime Themenstarter:in
34 Beiträge seit 2005
vor 18 Jahren

Also wie gesagt das sind die Lösungen die auf jedenfall funktionieren (eben von mir getestet =)):

von dezimal zu hexadezimal:

								iLine = Convert.ToInt32(iLine).ToString("X");

von dezimal zu binär:

								uint iAnz = Convert.ToUInt32(iLine);
string iErgebnis = "";
uint iRest;
while (iAnz > 0) 
	{							
    iRest = iAnz % 2;
	iErgebnis = iRest.ToString() + iErgebnis;
	iAnz = iAnz / 2; 
	}
iLine = iErgebnis;

Von hexadezimal zu dezimal:

								uiHex = Convert.ToUInt32(iLine, 16);
iLine = uiHex.ToString();

von binär zu dezimal:

								uiBin = Convert.ToUInt32(iLine, 2);
iLine = uiBin.ToString();

'Ich sag ja immer: "Wer nicht mit der Zeit geht, der muss halt mir der Zeit gehen ne...!"'

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo sublime,

von von dezimal zu binär geht, wie Programmierhans beschrieben hat:

Convert.ToString (int value, int toBase)

Du musst natürlich deinen Wert als int reinpacken. Wenn es noch kein int ist, benutzt du halt Convert.ToInt32(iLine).

Ist dann immer noch deutlich kürzer, als das selbst gestrickte.

herbivore

4.221 Beiträge seit 2005
vor 18 Jahren

Original von herbivore
Ist dann immer noch deutlich kürzer, als das selbst gestrickte.

An die Laufzeit darf man dabei schon gar nicht denken.... Wenn schon von Hand dann wenigstens mit Bitshifting

So in der Art

1 << 0 --> 1
1 << 1 --> 2
1 << 2 --> 4
1 << 2 --> 8

Der SHIFT Operator shiftet die Bits nach links (oder rechts)....

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

S
sublime Themenstarter:in
34 Beiträge seit 2005
vor 18 Jahren

Ah, jetzt hab ich den Fehler raus der da noch war. =) Ok funktioniert thx. Bin ja nur Azubi ich darf noch Fehler machen hehe

'Ich sag ja immer: "Wer nicht mit der Zeit geht, der muss halt mir der Zeit gehen ne...!"'