Datenkonvertierung #2. int -> char[] -> int



  • Hallo,
    ich hab zu dem Thema schonmal ein Threat aufegemach, nun sieht das Problem aber schon wieder etwas anders aus, so dass ich am besten nochmal frage.

    Ich habe einen Integer( 4 byte ) und will diesen auf einen charbuffer[ 4 ] konvertieren.

    unsigned int test = 100;
    char * buffer [ sizeof( test ) ];
    *buffer[0] = char( test );
    

    erste Frage: Ist das der richtige Weg ?

    zweite Frage: Nun habe ich ein Char-Array mit 4 Feldern. Was muss ich machen um dies wieder auf ein unsigned int zu konvertieren ?

    //
    Das ganze muss unter Windows und Linux laufen, so dass ich diese oft empfohlenen atoi() etc. Funktionen nicht nutzen kann.


  • Mod

    mutehim schrieb:

    Ich habe einen Integer( 4 byte ) und will diesen auf einen charbuffer[ 4 ] konvertieren.

    und das heisst?

    unsigned int test = 100;
    char * buffer [ sizeof( test ) ];
    *buffer[0] = char( test );
    

    erste Frage: Ist das der richtige Weg ?

    Nö. Das ist undefiniertes verhalten.

    zweite Frage: Nun habe ich ein Char-Array mit 4 Feldern.

    Du hast ein array aus vier pointern auf char.

    möglicherweise meinst du etwas in der art

    union
    {
        unsigned v;
        char buf[sizeof(v)];
    };
    v = 100;
    // tu irgendwas mit buf
    

    das ist legal aber nicht portabel. der inhalt von buf hängt hier vom byte ordering deiner plattform ab.



  • hallo,

    atoi ist aber Standard C, läuft also auch unter Linux...

    Wenn du nur den Typ wechseln willst, dann caste einfach:

    int zahl = 100;
    char *c = (char *)&zahl;



  • Das geht sicher in die Hose. (Bei 100 klappts noch).
    sizeof(int) ist zwar 4, aber ein int dezimal kann bis zu 2^32 werden
    -> ~4300000000. Du brauchst also mindestens einen char [11].


Anmelden zum Antworten