Für eine Rom Initialisierungsdatei möchte ich eine Text datei mittels c
mit 16 bit Zahlen füllen. Im Prinzip funktioniert es, allerdings werden
die Zahlen nicht mit 16bit ausgegeben.
1
#include<stdio.h>
2
#include<stdlib.h>
3
#include<stdint.h>
4
intmain(void)
5
{
6
inti;
7
uint16_ta=0b0000000000000000;
8
9
charstring[16];
10
itoa(a,string,2);
11
FILE*datei;
12
datei=fopen("ROM.txt","w");
13
if(datei==NULL)
14
{
15
printf("Fehler beim oeffnen der Datei.");
16
return1;
17
}
18
for(i=1;i<=32768;i++)
19
{
20
21
fprintf(datei,"%s\n",string);
22
a=a+1;
23
itoa(a,string,2);
24
}
25
26
27
28
fclose(datei);
29
return0;
30
}
die zahlen sollen alle die Länge 16 bit haben. kennt jemand da eine
Lösung?
mfg
In welchem Format möchtest du die Zahlen haben? So wie du sie jetzt
ausgibst sind sie als ASCII-Dezimalzahl gespeichert. Willst du sie
vielleicht binär schreiben, d.h. immer 2 bytes = 1 16bit-Zahl? Little
Endian oder Big Endian?
sergej schrieb:> char string [16];
Das ist um eins zu wenig. Wenn du 16 ASCII Zeichen Speichen willst, hat
die Nullterminierung nicht mehr Platz.
sergej schrieb:> kennt jemand da eine> Lösung?
Man könnte das itoa daduch ersetzten:
das was ich gemacht habe ist natürlich völliger blödsinn. in meiner
ersten version hätte ich ja 16*8 und das ist ja voll daneben.
ich dachte ich bekomme mit string[16] einen 2 byte string^^
das \n muss weg, damit wird ja noch ein Zeichen mehr erzeugt.
und dann "%2s", damit mur 2 Zeichen vom String ausgegeben werden.
Dann kommen von jeder Zahl 16 Bit in die Datei.
sergej schrieb:> richtig,...
Dann brauchst du dafür auch 16 ASCII Zeichen + Nullterminierung und also
ein 17 Elemente großes char Array.
Die oben gepostete myitoa sollte das machen was du brauchst. Die
Übergabeparameter sind die Zahl (int zahl) und der String (char* text).
BTW: Die Variable "a" könntest du dir auch sparen und "i" dem itoa
übergeben.
Max H. schrieb:> sergej schrieb:>> richtig,...> Dann brauchst du dafür auch 16 ASCII Zeichen + Nullterminierung und also> ein 17 Elemente großes char Array.> Die oben gepostete myitoa sollte das machen was du brauchst. Die> Übergabeparameter sind die Zahl (int zahl) und der String (char* text).>> BTW: Die Variable "a" könntest du dir auch sparen und "i" dem itoa> übergeben.
verwende ich die Funktion falsch? im weil momentan passiert da nichts.
Max H. schrieb:> Wenn ich die Länge des char Array auf 17 erhöhte und am Ende noch> ein return 0;> }einfüge funktioniert dein Code bei mir.>> Ein fclose(datei); am Ende könnte auch nicht schaden.
stimmt, das array auf 17 zu vergrößern hat das problem gelöst.
das return 0 und fclose(datei) hatte ich drin, aber vergessen mit zu
kopieren^^
danke max, es läuft jetzt
sergej schrieb:> stimmt, das array auf 17 zu vergrößern hat das problem gelöst.
Beim Dritten mal hast du's mir geglaubt ;-)
Max H. schrieb:> sergej schrieb:>> char string [16];> Das ist um eins zu wenig. Wenn du 16 ASCII Zeichen Speichen willst, hat> die Nullterminierung nicht mehr Platz.Max H. schrieb:> Dann brauchst du dafür auch 16 ASCII Zeichen + Nullterminierung und also> ein 17 Elemente großes char Array.Max H. schrieb:> Wenn ich die Länge des char Array auf 17 erhöhte
Max H. schrieb:> sergej schrieb:>> stimmt, das array auf 17 zu vergrößern hat das problem gelöst.>> Beim Dritten mal hast du's mir geglaubt ;-)>
xD geglaubt habe ich es dir schon, aber irgendwie ungewollt ignoriert^^
pah.
Soll mir noch einmal einer der arroganten C-Fraktion sagen "man muss
halt nur wissen, was man tut". argh!
Das stimmt für Leute mit Ahnung, doch leider ist das bei mind. 50% der
C-Frickler nicht der Fall...
Nullterminierung ist nun wirklich das prominenteste Beispiel! facepalm
pah schrieb:> pah.> Soll mir noch einmal einer der arroganten C-Fraktion sagen "man muss> halt nur wissen, was man tut". argh!
Tja.
Da kann man was fürs Leben lernen.
Wie sagte schon weilland Cpt. Jack Sparrow: Es geht darum, was ein Mann
kann, oder was ein Mann nicht kann!
Für alle anderen gibt es dann noch DSDS. Da sagt einem dann die Jury
bzw. D. Bohlen, dass man nicht singen kann, obwohl man sich schon als
der nächste Superstar sah.
Nicht vergessen: "Niveau sieht nur von unten betrachtet wie Arroganz
aus."
> Das stimmt für Leute mit Ahnung, doch leider ist das bei mind. 50% der> C-Frickler nicht der Fall...
Wohl wahr.
Auf der anderen Seite ist C nun mal nichts für Leute, die mit der Tante
Lulu machen gehen müssen.
Karl Heinz schrieb:> Nicht vergessen: "Niveau sieht nur von unten betrachtet wie Arroganz> aus."
Das mag ja durchaus im einen oder anderen Fall zutreffen, allerdings
kann ich die Verbindung von Programmiersprache und Männlichkeit und den
testosteron-geschwängerten Grundtenor nicht ganz nachvollziehen.
Moderne Softwareentwicklung hat meiner Meinung nach nichts mit
Cowboyromantik zu tun.