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...!"'
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
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...
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...!"'
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
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...!"'
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...!"'
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
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...!"'
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
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...
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...!"'