int in char umwandeln



  • Maffe001 schrieb:

    Ich kann dir zwar keine Antwort auf deine Frage, aber mal noch ne andere Sache. Wenn du das so deklarierst char buf[1], dann kannst du doch nie einen Wert dort speichern, weil in diesem "einem Feld" immer "0" stehen wird um den String abzuschließen. Oder liege ich jetzt total daneben?

    Dann ne andere Frage, wie willst du denn 256 (0-255) verschiedene Werte mit 2 (0, 1) möglichen Werten unterscheiden? Schliesslich willst du nur ein Bit verwenden. 😕

    Nullterminierter String ist nicht zwingend da, aber man kann ihn halt weglassen. Ist nur arg unfein.

    Zu Deiner Frage:

    Ich denke da ist nen kleiner Fehler im Code bei TRACE1

    TRACE1("Buffergröße: %d", sizeof(buf));
    

    Der Platzhalter für die Variable fehlt dort (siehe MSDN).



  • Nullterminierter String ist nicht zwingend da, aber man kann ihn halt weglassen. Ist nur arg unfein.

    Ich weiss, aber wenn man sprintf(..) verwendet, dann ist da auch ein nullterminierender String drin. Nö? Oder?

    Trotzdem bin ich auf die Antwort der meiner zweiten Frage gespannt. 😃



  • Maffe001 schrieb:

    Nullterminierter String ist nicht zwingend da, aber man kann ihn halt weglassen. Ist nur arg unfein.

    Ich weiss, aber wenn man sprintf(..) verwendet, dann ist da auch ein nullterminierender String drin. Nö? Oder?

    Trotzdem bin ich auf die Antwort der meiner zweiten Frage gespannt. 😃

    sprintf zählt den nullterminierenden nicht mit. Wenn der also nicht drin ist, macht es denke ich mal nix, oder?

    Eine Antwort auf Deine zweite Frage wäre sicherlich interessant Maffe001 😕



  • Man könnte ihm natürlich auch noch verraten, dass char buf[1] nicht 1 Bit ist sondern ja auch schon 8 Bit, oder waren's 8 Byte?, (? Ich bin immer so unsicher bei solchen Sachen :D) im Speicher einnimmt. 🙄



  • und dann sollte sizeof(buf) == 4 sein, wenn buf als char buf[1]; deklariert ist! (Erriner dich, die variable eines Array ist eigentlich der Zeiger auf das erste Element ! )
    Warum ueberhaupt array, versteh ich auch ned :p

    Nun noch mal zum speichern, willst du den Wert binaer oder in textform in die datei schreiben ? fuer die Textform brauchst 2 Byte (Hexadezimal) muss ja 00 - FF sein :p
    wenn binaer, dann langt 1 Byte . (ich nehm mal an, das du mit Bit Byte meinst.

    Das umwandeln in text kannst mit sprintf machen ... aber halt sprintf ist die ansiversion, die windows TCHAR version ist _stprintf !

    Aber ich bin mich echt nicht sicher, wass du willst ...

    pFile.Write(buf, sizeof(buf));

    Sieht nach binaer aus ???

    sprintf(buf, "%c", char(a));

    Sieht nach Text konversion aus ???

    Was nu ?

    Willst binaer schreiben (1 Byte ) dann :

    int a = GetDlgItemInt(IDC_???); 
    unsigned char buf = static_cast<unsigned char>(a);
    CFile pFile; 
    // ... 
    pFile.Write(buf, sizeof(buf));
    

    willst Text schreiben, und du nimmst eh CStdioFile, dann nimm auch CString !

    int a = GetDlgItemInt(IDC_???); 
    CString strBuf;
    strBuf.format(_T("%2.2X"),a);
    CStdioFile pFile; 
    // ... 
    pFile.WriteString(strBuf);
    

    Ciao ...



  • Scheinbar hatte ich mein Problem etwas zu verschlüsselt geschildert, daher ein neuer Ansatz:

    Mein Hauptanliegen war es, eine Zahlenwert von 0 bis 255 möglichst Platz sparend zu speichern. Da 1 Byte (ich meinte tatsächlich Byte) 256 Speichermöglichkeiten zur Verfügung stellt, wäre das doch ideal.

    So soll gespeichert werden:
    Der Zahlenwert 0 als char(0)
    Der Zahlenwert 1 als char(1)
    ...
    Der Zahlenwert 255 als char(255)

    Das Problem ist nur: Wie bekomme ich die Zahl in das Byte?

    Der Code

    int a = 5;              // z.B.
    char buffer[255];       // Größe spielt ja keine Rolle
    ...
    sprintf(buffer, "%c", char(a));
    pFile.Write(buffer, sizeof(buffer));
    

    funktioniert leider nicht. Mit Hilfe der Trace-Leiste (s.o.) stelle ich fest, das die Größe des Buffers 0 beträgt und nicht 1 wie erwartet.

    Also immernoch die Frage, wie kriege ich die Zahl in das Byte?

    ____________________________________________________________________________
    Ich glaube, so richtig konnten mir eure Beiträge nicht helfe, hoffe aber, dass ich mein Problem nun eindeutig geschildert habe...



  • Irgendwie hab ich mit deinen Formulierungen leichte Probs ...

    Zahlenwert von 0 bis 255

    Also ein unsigned char !

    // Größe spielt ja keine Rolle

    Also, wer das behaupted, luegt ! ... Jaja Frauen luegen manchmal 😃
    DU meinst sicher, das deine groesse dynamisch ist !

    Wenn ich dich richtig verstehe
    eine Zahl hat bei dir nen wertebereich von 0..255
    du willst mehrere Zahlen aufs mal in die Datei binaer (also nicht mit texteditor in klarform erkennbar) wegschreiben.

    ALso ca sowas ....

    #define ANZ 255; 
    
    unsigned char buffer[ANZ]; 
    // irgendwo deine werte abfragen und ins array schreiben ... 
    for(size_t i = 0; i < ANZ; ++i)
    {
        // irgendwo nen int herbekommen 
        int iwert = 42; 
        // ins array schreiben 
        buffer[i]= static_cast<unsigned char>(iwert);
    }
    // Datei vorbereiten ... 
    CFile File;
    File.open(..);
    // hier array in die datei schreiben 
    File.write(buffer,sizeof(unsigned char)*ANZ);
    

    Meinst du sowas??? Oder lieg ich total schief ? (wobei hier die groesse statisch ist ... )

    Ciao ...



  • Das klingt schon anders. Ich ziehe alle meine Einwände zurück. Ich hab eine Idee, die auch funktionieren könnte. Sie hat zwar nicht viel mit dem bisher geposteten zu tun, aber vielleicht interessiert's dich.
    Man könnte 256 Werte auch so codieren, in dem man einfach

    char Buf [1];
    
    Buf = 0; //geht natürlich auch mit allen anderen Zahlenwerten bis 255
    

    macht. Natürlich ist die Auswertung ein bisschen eklig und es stehen auch nicht die Zahlen ansich dort drin sondern die ASCII-Zeichen, die damit bezeichnet werden.

    Maffe :p



  • Ich glaub ich verzweifel grad ....

    char Buf [1]; 
     
    Buf = 0; //geht natürlich auch mit allen anderen Zahlenwerten bis 255
    

    Was glaubst du, was dieser Code tut ... erklaer uns das bitte mal!

    Ciao ...



  • Na er übergibt an Buf das ASCII-Zeichen mit dem Dezimalwert 0. In dem Fall wäre das NUL, also Stringende, wenn du so willst.

    Buf = 65;
    

    Das wäre jetzt zum Beispiel A.



  • Danke, die letzten Beiträge haben mir weitergeholfen!


Anmelden zum Antworten