long long in char[8] speichern



  • Hallo!

    Wie kann ich ein long long platzsparend in einem 8 char großem Array speichern? Eine 64bit Zahl ist ja nur 8 Byte groß.

    Das soll der Code machen:

    long long i = 9223372036854775808;
    char zahl[8] = i; //Mit welcher Funktion geht das???
    


  • mit memcpy sollte das gehen... aber wozu brauchst du das?



  • Ich brauch das um eine Zahl zu speichern. Die Datei muss binär und möglich klein sein.



  • Der sinnvolle Weg wäre eine union

    long long i = 9223372036854775808L; // hier fehlte bei dir das L für long
    char zahl[8]; //Mit welcher Funktion geht das???
    int  k;
    union {
         char data_c[8];  // hier bewußt ohne den Platz für eine schlißende NUll
                         // ich nutze ein Array of char und keinen String.
         long long data_ll;
          }  test;
    
    test.data_ll=i;
    for (k=0;k<7;k++)
      zahl[i]=test.data_c[i];
    

    ich vermute das du diese Daten binaer in ein File schreiben willst

    das geht mit

    fwrite( test.data_c, sizeof( char ), 8, stream );
    

    Das lesen aus dieser datei würde ich mit fread machen.

    Die Rückkonvertierung der 8 Characters in eine long long zahl muß ebenfalls mit dieser union geschehen,
    da sie die Daten in einer internen Reihenfolge (little Endian/ Big Endian) speichert.



  • Danke für die Antwort. Leider stürzt das Programm aber immer ab.



  • Dan poste mal die entscheidenden Stellen, bzw. die Stelle an der es abstürtzt



  • soweit ich weiss sollte man das nicht machen, das mit er union. funktioniert zwar eigentlich immer aber laut standard muss es nicht funktionieren -> bööööse 🙂 vorallem weil man da einfach mal die annahme macht long long sei 8 byte gross, was nicht unbedingt so sein muss.

    und wieso überhaupt konvertieren?

    long long foo;
    fwrite( &foo, sizeof(long long), 1, stream );
    

    geht auch.

    @PAD sizeof(char) ist per definition 1 😉



  • Diese union Geschichte war lange Zeit und ist es vielleicht immer noch die Methode um Daten in ein file zu schreiben.

    jedes Fileschreiben wurde reduziert auf das schreiben eines einzelnen Bytes (chars) über die Funktionen (f)putc (f)getc.

    Wenn man nämlich nur ein (f)putchar und eine (f)getchar Funktioen hat muß man vorher die Daten in ein array of char Konvertieren um diese dann Byte (char) weise zu schreiben.

    In den Board Support Packages vieler embedded Compiler wird vom User verlangt das er eine entsprechende
    (f)putchar und (f)getchar Funktion für den Compiler bereitstellt.


Anmelden zum Antworten