Array in einer Datei abspeichern

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
SeriK00
Beiträge: 34
Registriert: Fr Mai 15, 2009 12:15 pm

Array in einer Datei abspeichern

Beitrag von SeriK00 » So Sep 06, 2009 2:49 pm

Guten Abend,
ich habe folgendes Anliegen.
Ich habe mit Hilfe eines Algorihmen CRC berechnet und diese in einem Array abgespeichert: TableHeaderCRC[256].
Die Werte befinden sich in diesem Array
Jetzt wurde ich genre dieses Array in main C Code einfügen.

Code: Alles auswählen

static const unsigned char HeaderCRC_Table[256] = 
{
    0x00, 0xfe, 0xff, 0x01, 0xfd, 0x03, 0x02, 0xfc,
    0xf9, 0x07, 0x06, 0xf8, 0x04, 0xfa, 0xfb, 0x05,
    0xf1, 0x0f, 0x0e, 0xf0, 0x0c, 0xf2, 0xf3, 0x0d,
    0x08, 0xf6, 0xf7, 0x09, 0xf5, 0x0b, 0x0a, 0xf4,

usw.
Allerdings habe ich keine Lust das manuell zu machen.
Ich wollte das in einer Datei abspeichern und dann einfach daraus kopieren und ins source code einfügen.
Es klappt nicht ganz:
1. Es sollen hex werte sein wenn ich das als .dat abspechere werden die Werte nicht als hex dagestellt.
2. Der letzte Wert ist nicht in der Datei

Vielen Dank für die Hilfe.



Code: Alles auswählen

#include <stdio.h>

#define MAX_ARRAY 255

unsigned char TableHeaderCRC[256];

unsigned char main ( void )
{
	FILE *fp;
	unsigned char dataValue = 0x00;
	unsigned char crcValue = 0xFF;
	unsigned char i;
	int c;

	for ( i=0; i<MAX_ARRAY; i++ )
	{
		unsigned int crc;
		crc = crcValue ^ dataValue; /* XOR C7..C0 with D7..D0 */
		/* Exclusive OR the terms in the table (top down) */
		crc = crc ^ (crc << 1) ^ (crc << 2) ^ (crc << 3)
		^ (crc << 4) ^ (crc << 5) ^ (crc << 6) ^ (crc << 7);
		/* Combine bits shifted out left hand end */
		TableHeaderCRC [MAX_ARRAY - i] = (crc & 0xfe) ^ ((crc >> 8) & 1);
		dataValue++;
	}

AB HIER:

	if ((fp = fopen("TableHeaderCRC.dat", "w")) == NULL)
		return 1;
	else
	{
		for ( i=0; i<MAX_ARRAY; i++ )
		{
			putc(TableHeaderCRC[i],fp);
		}
	}
	return 0;
}
Windows XP Prof
Visual Studion 2005
Keil µVision 3

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Array in einer Datei abspeichern

Beitrag von nufan » So Sep 06, 2009 3:05 pm

SeriK00 hat geschrieben:1. Es sollen hex werte sein wenn ich das als .dat abspechere werden die Werte nicht als hex dagestellt.
putc schreibt Zeichen, also chars, deshalb werden wahrscheinlich ASCII-Zeichen angezeigt. Stattdessen kannst du fprintf mit %x oder %X verwenden.
SeriK00 hat geschrieben:2. Der letzte Wert ist nicht in der Datei
Weil du das Maximum auf 255 setzt und den '<'-Operator verwendest läuft die Schleife nur bis 254 und bricht bei der Erhöhung auf 255 ab. Entweder 256 oder '<=' sollte das Problem lösen.

SeriK00
Beiträge: 34
Registriert: Fr Mai 15, 2009 12:15 pm

Re: Array in einer Datei abspeichern

Beitrag von SeriK00 » So Sep 06, 2009 3:44 pm

Super Vielen Dank,
die Frage ist jetzt vielleicht zu doff, aber die 2. Zahl wird abgeschnitten, falls diese eine 0 ist.

Vielen Dank.

0x0, 0xfe, 0xff, 0x1, 0xfd, 0x3, 0x2, 0xfc,
0xf9, 0x7, 0x6, 0xf8, 0x4, 0xfa, 0xfb, 0x5,
0xf1, 0xf, 0xe, 0xf0, 0xc, 0xf2, 0xf3, 0xd,
0x8, 0xf6, 0xf7, 0x9, 0xf5, 0xb, 0xa, 0xf4,
0xe1, 0x1f, 0x1e, 0xe0, 0x1c, 0xe2, 0xe3, 0x1d,

Code: Alles auswählen

/* Accumulate "dataValue" into the CRC in crcValue.
/ Return value is updated CRC
/
/ Assumes that "unsigned char" is equivalent to one octet.
/ Assumes that "unsigned int" is 16 bits.
/ The ^ operator means exclusive OR */
#include <stdafx.h>
#include <stdio.h>


#define MAX_ARRAY 255

unsigned char TableHeaderCRC[256];

unsigned char main ( void )
{
	FILE *fp;
	unsigned char dataValue = 0x00;
	unsigned char crcValue = 0xFF;
	unsigned char i;

	for ( i=0; i<MAX_ARRAY; i++ )
	{
		unsigned int crc;
		crc = crcValue ^ dataValue; /* XOR C7..C0 with D7..D0 */
		/* Exclusive OR the terms in the table (top down) */
		crc = crc ^ (crc << 1) ^ (crc << 2) ^ (crc << 3)
		^ (crc << 4) ^ (crc << 5) ^ (crc << 6) ^ (crc << 7);
		/* Combine bits shifted out left hand end */
		TableHeaderCRC [MAX_ARRAY - i] = (crc & 0xfe) ^ ((crc >> 8) & 1);
		dataValue++;
	}
	if ((fp = fopen("TableHeaderCRC.dat", "w")) == NULL)
		return 1;
	else
	{
		for ( i=0; i<MAX_ARRAY; i++ )  
		{ 
			if( i%8 == 0 )
			{
				fprintf(fp, "\n" );	
			}
			fprintf(fp, "0x%x, ", TableHeaderCRC[i]);
		}
		fprintf(fp, "0x%x", TableHeaderCRC[255]);

	}
	return 0;
}
Windows XP Prof
Visual Studion 2005
Keil µVision 3

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Array in einer Datei abspeichern

Beitrag von nufan » So Sep 06, 2009 3:54 pm

Warum gibst du die letzte Zahl extra aus? Du musst ja nur in der Schleife auf <= setzen.
%02x sollte den von dir gewünschten Effekt erzielen.

SeriK00
Beiträge: 34
Registriert: Fr Mai 15, 2009 12:15 pm

Re: Array in einer Datei abspeichern

Beitrag von SeriK00 » So Sep 06, 2009 4:10 pm

Ich programmiere unter Studio 2005 und wenn ich auf <= einstetze kommt das Konsolenfenster.
Wenn ich die Datei öffne, so wird zwar auch der letzte eintrag geschrieben aber das ganze läuft dann in einer Schleife.
Also Array für Array...

Weiß nicht warum.
Windows XP Prof
Visual Studion 2005
Keil µVision 3

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Array in einer Datei abspeichern

Beitrag von nufan » So Sep 06, 2009 4:17 pm

SeriK00 hat geschrieben:Ich programmiere unter Studio 2005 und wenn ich auf <= einstetze kommt das Konsolenfenster.
Wenn ich die Datei öffne, so wird zwar auch der letzte eintrag geschrieben aber das ganze läuft dann in einer Schleife.
Also Array für Array...

Weiß nicht warum.
Sorry, hab jetzt erst gesehen, dass du ein unsigned char für den Zähler verwendest. Das geht nur bis 255 (8 Bit) und wenn du dann noch inkrementierst kommst du wieder auf 0. Nimm einfach ein int für i.
Und wenns sparsam sein soll eben short int ;)

SeriK00
Beiträge: 34
Registriert: Fr Mai 15, 2009 12:15 pm

Re: Array in einer Datei abspeichern

Beitrag von SeriK00 » So Sep 06, 2009 4:24 pm

Super, es läuft.

Vielen Dank!!
Windows XP Prof
Visual Studion 2005
Keil µVision 3

Antworten