Binär umwandeln
-
Hallo miteinander!
Ich schreibe gerade an einem Programm, dass Dezimalen in Binär umwandeln und diese dann in eine Datei schreibt.
Zum Umrechnen habe ich dann diesen Code:
int main() { FILE* datei; if( (datei = fopen("file.bin", "ab+")) == NULL) { printf( "Fehler: Datei existiert nicht"); getch(); return 0; } else { printf("Die Datei existiert"); } char string = 0; char rest = 0; printf("\nSchreibe etwas in die Datei: "); scanf("%s", string); while(string > 0){ rest = string%2; string = string/2; fputs(rest, datei); } }
Also eigentlich sollte er den rest immer in die Datei einschreiben.
Jetzt habe ich leider zwei Probleme:
- Das Programm stürzt vor dem Einschreiben ab (also vor fputs)
- Die while-Schleife würde den Binären Code verkehrt ausgeben (also bei 2 würde 01 statt 10 stehen...)Ich wäre froh, wenn Ihr mir bei den Problemen helfen könntet
Lg Rogon
-
%s ist der Formatspezifizierer für Zeichenketten. Und obwohl du die Variable string nach einer Zeichenkette benannt hast, so hast du sie doch als ein einzelnes Zeichen definiert.
Für das Umdrehen: Dann musst du dir wohl etwas andres ausdenken. Ein paar Vorschläge:
1. Zwischenergebnis merken
2. Rekursion benutzen
3. Einfach andersrum rechnen: Von einer hohen Zweierpotenz an ausrechnen, wie oft diese in die Zahl passt und immer kleiner werden.
-
SeppJ schrieb:
%s ist der Formatspezifizierer für Zeichenketten. Und obwohl du die Variable string nach einer Zeichenkette benannt hast, so hast du sie doch als ein einzelnes Zeichen definiert.
Wie würdest du die Variable definieren?
Mein Programm stürzt bei allen Variabeltypen ab...
-
Rogon schrieb:
SeppJ schrieb:
%s ist der Formatspezifizierer für Zeichenketten. Und obwohl du die Variable string nach einer Zeichenkette benannt hast, so hast du sie doch als ein einzelnes Zeichen definiert.
Wie würdest du die Variable definieren?
Mein Programm stürzt bei allen Variabeltypen ab...Mein Ratschlag war andersrum gemeint. Dein Formatspezifizierer ist falsch. Nimm mal einen int und auch den Formatspezifizierer dafür.
Ein Compiler würde dich auch vor solchen Fehlern warnen, wenn du ihn nur ließest. Warnoptionen immer auf Maximum setzen, Warnungen wie Fehler behandeln.
-
Das habe ich jetz nicht so genau verstanden...
Ich habe aber meinen Code ein bisschen aktualisiert:
#define string int rest = 0; int zahl; printf("\nSchreibe etwas in die Datei: "); scanf("%s", zahl); #define string (zahl) while(string > 0){ rest = string%2; #define string (string/2) fputs(rest, datei); } fputs("\n", datei); fclose(datei); return 0;
Jetzt passiert einfach gar nichts.
Das Programm bleibt irgendwo stecken.Kann es sein, dass sich #define und int nicht vertragen?
In einem anderen code habe ich auch #define zahl und eine schlaufe
while(zahl%5 != 0 || zahl > variable || zahl <= 0)
Da crasht das Programm leider...
Weisst du wo mein Überlegungsfehler liegt?
Ein kleiner Programmcode wie es richtig geht wäre super cool!Lg Rogon
-
Da du offensichtlich nicht Willens oder in der Lage bist, dein Problem qualifiziert zu schildern, damit du qualifizierte Antworten erhälst, die dir weiterhelfen, hier nochmal explizit ein Teil aus den Neulingshinweisen, die du nicht gelesen/beachtet hast:
Wenn du Code postest, dann bitte nur ein kleines darstellendes Programm, welches man sofort und ohne Umwege kompilieren kann. An dieser kleinen Demo soll dein Problem klar dargestellt sein. Die Demo darf keinen Code enthalten, der nicht am Problem beteiligt ist (abgesehen von allem, was zu einem kompilierbaren Programm gehoert).
-
Was machen die defines da? Hast du die eingebaut, weil in meiner Antwort das Wort "definieren" vorkam? Das hast du leider völlig falschverstanden. Hast du überhaupt irgendeine Ahnung, was das macht oder was das Wort Definition im Kontext von Variablen bedeutet? Wie soll man dir helfen, wenn dir die Grundlagen, ja sogar der Wortschatz, fehlen, um die Antwort überhaupt zu verstehen? Ich versuche es mal so:
http://www.c-plusplus.net/forum/300567
http://www.c-plusplus.net/forum/136013
http://www.c-plusplus.net/forum/f21
-
Fassen wir noch mal ein paar Informationen zusammen, die du schon von deinem letzten Post kennst.Ein Hinweis auf String in Hex umwandeln und Hex in String aus diesem Forum.
Darin ist im leztzten Post ein Link zu einem anderen Forum zur Ausgabe von Zahlen auf LCD enthalten.
Wärst du dem Link gefolgt hättest du eine Funktion itoa (mit Quellcode) gefunden.
Mit demDirkB schrieb:
Tipp: Dual ist Basis 2, Dezimal ist Basis 10 und Hexadezimal ist Basis 16.
könntest du darauf kommen, einige 10 in der Funktion durch 2 zu ersetzen.
In dieser Funktion sind alle deine Probleme (und noch mehr) bereits gelöst.
-
Also ich habe es ein bisschen anders gelöst:
Hier mein Code:
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> int main() { fopen("datei", "ab+"); char eingabe [10]; FILE* datei; if( (datei = fopen("file.giomizer", "ab+")) == NULL) { printf( "Fehler: Datei existiert nicht"); getchar(); return 0; } else { printf("Datei bereit!\n"); } printf("Geben Sie eine Zahl zwischen 0 und 255 ein\n"); scanf("%s", eingabe); fputs(eingabe, datei); fputs(" ", datei); int number; int rest; int y; for(y = 0; y >= 0; y--) { while(y < 7) { rest = number/(1 << y); number = number - rest * (1 << y); y++; fputs(rest, datei); } fputs(" ", datei); int test = eingabe; if (test == 0) { fputs("0", datei); } else if (test == 2) { fputs("1", datei); } else if (test == 1) { fputs("0", datei); } else if (test%2 == 0) { //Modulo fputs("0", datei); } else if (test%3 == 0) { fputs("0", datei); } else if (test%4 == 0) { fputs("0", datei); } else if (test%5 == 0) { fputs("0", datei); } else if (test == 3) { fputs("1", datei); } else if (test == 5) { fputs("1", datei); } else if (test == 7) { fputs("1", datei); } else{ fputs("1", datei); } fputs("\n", datei); fclose(datei); //wichtig: FILE* muss wieder geschlossen werden return 0; }}
Allenfals hätte ich noch diesen Code gefunden aber für fputs ist es nun mal ein bisschen umständlich:
#include <stdio.h> void dec_bin(int number); int main(void) { int input = 0; printf("Digit (0-255): "); scanf("%d", &input); (input >= 0) && (input < 256) ? dec_bin(input) : exit(1); return 0; } void dec_bin(int number) { int x, y; x = y = 0; for(y = 7; y >= 0; y--) { x = number / (1 << y); number = number - x * (1 << y); printf("%d", x); } printf("\n"); }
Danke an allen für eure Hilfe!
Ihr seit super!Lg Rogon
-
Rogon schrieb:
Danke an allen für eure Hilfe!
Ihr seit super!Lg Rogon
Wenn das Programm durch unsere Hilfe entstanden ist, haben wir versagt.
Du hast absolut keine Ahnung davon, was du da geschrieben hast.