hallo Leute,
Ich moechte ein paar ULONG’s in eine Binaer-Datei schreiben, so, das jedes gerade 4 Bytes benoetigt. Ich meine, sprintf() ist ein supi Teil, aber für den Zweck ungeeignet.
Mein Versuche in der Art von „ULONG auf einen char* casten“ (in der main() ) waren nicht von Erfolg gekroent.
Frage 1:
Ist eine „union“ mithin die einzige Methode, um die ULONG’s
auf char* umzuwandeln, oder geht das auch anders?
Frage 2:
Der Ausdruck wo ich „nums[2]“ initialisiert habe, sollte im Bitmuster etwas anders aussehen, oder?
So, dass das erste von je acht Bits einen 1 ist die anderen 0, finde ich.
Hier mein Code:
//fwrite.cpp
#include
#include
#define DATEI "zahlen.bin"
union Box
{
ULONG uli;
char feld[4];
};
int schreibe()
{
ULONG nums[4] = {
1,
123,
( (1\> 24);
printf("%i, ", (int)uch);
}
printf("\n");
FILE \*fp = 0;
fp = fopen(DATEI, "wb");
if (fp==0) {return 1;}
// Zahlen binaer in den char-Zeiger schreiben
// ( sprintf() würde bloss eine Zeichenkette erzeugen )
// ein long sollte 4 Bytes in der DATEI brauchen, nicht bis zu 11...
Box box;
for (i=0; i %u\n", box.uli);
Sleep(500);
}
printf("\n");
fclose (fp);
return 0;
}
void umwandeln(char \*chz)
{
printf("%s\n", chz);
}
void ulongOut(ULONG uli)
{
printf("%u\n", uli);
}
int main()
{
ULONG uli = ( ('f' (uli) );
printf("/////////////");
if (schreibe() == 1)
{
printf("schreiben klappte nicht.");
Sleep(2000);
return -1;
}
if (lese() == 1)
{
printf("lesen klappte nicht.");
Sleep(2000);
return -1;
}
system("pause");
return 0;
}
PS: ich schreibe eigentlich nur C++, aber für die ofstream-Objekte kriege ich bei WIN32 - Projekten bloss einen Linker-Fehler, außerdem kann die CreateFile() auch keinen ASCII-Text. Ich verwende VC6, WIN2k. Dev-C++ und dotNet 2003 habe ich, auch Code::Blocks, vewende sie aber kaum.
lg
Martin