ERLEDIGT
NEIN
NEIN
ANTWORTEN
14
14
ZUGRIFFE
4966
4966
EMPFEHLEN
-
07.08.04 12:34 #1
- Registriert seit
- May 2004
- Beiträge
- 39
Hi,
gibt es in C/C++ schon eine vordefinierte Funktion, die Dezimalzahlen in Dualzahlen umwandelt oder muss ich die mir selber schreiben?
-
du meinst schon strings oder ?
-
07.08.04 18:33 #3
mußt du selber schreiben, hat aber sicher schon jemand im Forum für dich gemacht, einfach mal danach suchen...
-
07.08.04 19:10 #4
- Registriert seit
- May 2004
- Beiträge
- 39
Hast du nen Link? Ich find nix!
EDIT: Hab da mal was bei google gefunden! Link
Muss ich mal ausprobieren.Geändert von Trendy Andy (07.08.04 um 19:38 Uhr)
-
Bsp.:
Code :1 2 3 4 5 6 7 8 9 10
std::string dualzahl = ""; int zahl = 439828; for (int i = zahl; i != 0; ) { if (i & 1) dualzahl = dualzahl + std::string("1"); else dualzahl = dualzahl + std::string("0"); i = i >> 1; }
Hab mir das jetzt gerade aus den Fingern gesogen und nicht getestet. Du musst auf jeden Fall den String noch umdrehen.
-
08.08.04 20:08 #6
- Registriert seit
- May 2004
- Beiträge
- 39
Hab deinen Quelltext mal ausprobiert! Compilieren tut er, aber das Programm stürtzt mit nen Fehler ab! Woran liegt das?
-
08.08.04 20:52 #7
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Der Ansatz von Dudadida ist gut. Ich habe das mit dem Umdrehen behoben und auch den Absturz entfernt:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
#include <iostream> // für io #include <sstream> // für's umwandeln (stringstreams) #include <algorithm> // für's umdrehen (coole algorithmen) using std::string; using std::ostringstream; int main(void) { int zahl = 439828; // unser input ostringstream os; // hier drin binärziffern sammeln for ( int i = zahl; i != 0; ) { // es wird immer das rechte bit untersucht (also bit 0) // wenn zahl ungerade (Bit 0 == 1), dann // "1" an den ostringstream hängen, sonst "0" if (i & 1) os << "1"; else os << "0"; i >>= 1; // nach rechts shiften, um nächste // binärziffer zu untersuchen // (entspricht teilen durch zwei) } string dualzahl = os.str(); // in string kopieren std::reverse( dualzahl.begin(), dualzahl.end() ); // string umdrehen std::cout << "Ergebnis: " << dualzahl; // ausgabe // warten char c; std::cin >> c; return 0; }
Das Problem von Dudadidas Code war, dass man nicht einfach ein int zu einem String addiereren kann.
PS: Code läuft mit VS6, sollte aber eigentlich überall laufen.
--Edit:
Mir war noch eingefallen, dass man eventuell mit Streammanipulatoren arbeiten könnte, aber setbase kann leider kein Binärformat.Geändert von Kachelator (08.08.04 um 21:04 Uhr)
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
08.08.04 21:06 #8
- Registriert seit
- May 2004
- Beiträge
- 39
Wow! Danke für die fixe Antwort! Klappt wunderbar!
Hab aber noch ein kleines Problem! Ich will eine Datei binär einlesen. Das mach ich mit getc. Wie kann ich jedoch 2 byte binär einlesen? Mit fgets liest er mir dummerweise das ASCII Zeichen ein! Ich brauch aber Dezimalzahlen.
-
08.08.04 21:24 #9
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Nö. ... Doch halt! Nun gibt es sie:Original geschrieben von Trendy Andy
Hi,
gibt es in C/C++ schon eine vordefinierte Funktion, die Dezimalzahlen in Dualzahlen umwandelt oder muss ich die mir selber schreiben?
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
#include <iostream> // für io #include <sstream> // für's umwandeln #include <algorithm> // für's umdrehen using std::string; using std::ostringstream; string binary( unsigned int zahl ) { ostringstream os; // hier drin binärziffern sammeln for ( int i = zahl; i != 0; ) { // es wird immer das rechte bit untersucht // wenn zahl ungerade (Bit 0 == 1), // 1 an den ostringstream hängen, sonst 0 if (i & 1) os << "1"; else os << "0"; i >>= 1; // nach rechts shiften, um nächste // binärziffer zu untersuchen // (entspricht teilen durch zwei) } string dualzahl = os.str(); // in string kopieren std::reverse( dualzahl.begin(), dualzahl.end() ); // string umdrehen return dualzahl; } void wait() { // warten char c; std::cin >> c; } int main(void) { std::cout << "Ergebnis: " << binary( 439828 ); wait(); return 0; };
---Edit:
Huch! Habe gerade erst deinen Post gesehen. Kannst du dein Problem genauer erklären? Code posten oder so?Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
08.08.04 21:29 #10
- Registriert seit
- May 2004
- Beiträge
- 39
Hast du ne Idee wie man 2 Byte (oder mehr) binär einlesen kann?
-
08.08.04 21:33 #11
- Registriert seit
- May 2004
- Beiträge
- 39
Also ich hab mit nen Hex Editor eine Datei erstellt. (Inhalt: 0A 91 AB 11 2F 6D 00 9C 55 08 E1) Wenn ich mit getc 0A einlese, dann krieg ich ne 10 Dezimal! Jetzt will ich aber 91 AB, also 2 Byte, einlesen. Da müsste 43921 rauskommen. Mit fgets kann ich 2 Byte einlesen, nur krieg ich dann nen ASCII Zeichen.
-
08.08.04 21:54 #12
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Versuch es doch mal mit fread(). Da kannst du die Anzahl der zu lesenden Bytes angeben. Besser noch wäre, wenn du dich in den Gebrauch von iostreams (ifstream, ofstream und auch std:.cin und cout) einarbeitest , anstatt diese gemeingefährlichen C-Missgeburten wie fgetc und so weiter zu verwenden.
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
08.08.04 22:12 #13
- Registriert seit
- May 2004
- Beiträge
- 39
Hm. Bei fread kommt das selbe raus wie bei fgets. Mit iostreams kenn ich mich halt gar nicht aus.
-
09.08.04 20:39 #14
- Registriert seit
- May 2004
- Beiträge
- 39
hab ne Lösung gefunden! Ich les beide Bytes mit getc ein. 2 Byte integer = 1.Byte*256 + 2. Byte! Bei meinen Beispiel war das 145*256+171=37291=91AB!
PS: Die 43000 von oben war falsch!
-
Mach ich doch eigentlich gar nicht, funktioniert aber trotzdem nicht (bzw. meine Version hat bei mir gar nicht compiliertOriginal geschrieben von Kachelator
Das Problem von Dudadidas Code war, dass man nicht einfach ein int zu einem String addiereren kann.
). Wenn man nicht mit ostream arbeiten möchte, kann man auch an dualzahl mit der Methode append die Einzen und Nullen anhängen.
@Trendy Andy: Du kannst auch direkt mit fread in eine Variable bestimmter Größe einlesen und diese dann umwandeln. Der 2 Byte-Typ wäre dann short und fread sagst du dann, dass er 2 bytes einlesen und an die Adresse deiner short Variable schreiben soll.
Für 4 Bytes nimmst du dann halt int, für 8 _int64.
Ich würde die Binärfunktion dann noch für die beiden Typen überladen und eine Formatierungsoption einbauen (also halt immer 16 bzw. 32 Ziffern für short oder eben int).
Ähnliche Themen
-
C-Programm zur Umrechnung von Dualzahlen in Dezimalzahlen
Von ch275 im Forum C/C++Antworten: 5Letzter Beitrag: 02.12.10, 19:49 -
Dezimalzahlen
Von q1q im Forum Javascript & AjaxAntworten: 4Letzter Beitrag: 20.04.10, 21:04 -
Dezimalzahlen in Dualzahlen mit hilfe von arrays invertieren.
Von tomasson im Forum C/C++Antworten: 7Letzter Beitrag: 28.06.06, 18:42 -
Dualzahlen speichern
Von flooo im Forum Relationale DatenbanksystemeAntworten: 5Letzter Beitrag: 05.04.06, 15:57 -
Linux skript zum umwandeln von Dezimal in dualzahlen
Von borisbrause im Forum Sonstige SprachenAntworten: 1Letzter Beitrag: 26.10.05, 21:55





Zitieren
Login





