-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Integer in String umwandeln????

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.07.2004
    Ort
    Sennwald
    Alter
    27
    Beiträge
    103

    Integer in String umwandeln????

    Anzeige

    Hallo zusammen

    Ich habe ein kleines Problem. Ich bastel gerade mit nem grafiklcd rum. 128x64... ich hab mir jetzt ein paar funktionen zusammengeklöppelt die mir erlauben adressen zu setzt, reseten, linen zu zeichnen und Text auszugeben.

    meine Unterfunktion lcd_putchar funktioniert soweit gut.... nur was ist wenn ich eine Zahl ausgeben will??...zB das Resultat einer Rechnung oder ADC's???.....


    void lcd_putchar(char f)
    {
    int fx;
    switch(f)
    {
    default:
    for(fx = 0; fx < 6; fx++)
    {
    lcd_write(font[(f-0x20)][fx]);
    output_low(LCD_RW);
    output_high(LCD_DI);
    lcd_enable();
    }
    break;
    }
    }


    die Font sitzt in nem Arrey....also der ganze alsci-code....und jeder char besteht aus 6 byte...also 6x8pixel.....

    der Switch soll jetzt nicht verwirren...es funktioniert..... nur wie bekomme isch nun eine Integer Zahl so umgewandelt das ich diese als Text an dieses Unterprogramm übergeben kann??... jemand ne idee???


    ach ja....ich arbeite mit einem PIC18f452 und CCS Compiler in MPLAB

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    47
    Beiträge
    497
    Wenn, wie du sagst, der gesamte ASCII Zeichensatz ab dezimal 32 im Font-Array liegt dann ist der Dezimalwert der Zahl 0 bei 48 und sollte also im Array an der Stelle 48-32=16 liegen. wenn du der Funktion ein char 49 übergibst muss auf dem Display eine 1 erscheinen.

    Hoffe das war verständlich. Ansonsten noch mal nachfragen.

    EDIT: Hast du schon mal lcd_putchar('1'); probiert?

    sast

    雅思特史特芬
    开发及研究

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.07.2004
    Ort
    Sennwald
    Alter
    27
    Beiträge
    103
    klar.... das geht jo auch......aber die bringe ich eine Integer varibale (zB int x = 128; decimal) auf die Form eines Strings??? (zb int = String[1][2][8];....gibts da irgend ne moglichkeit ohne viel code??


    alles was ich als text übergebe (zB "test") wird auch als text augegeben.....
    und lcd_putchar('2'); funktioniert nur bei einzelnen ziffern

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    47
    Beiträge
    497
    Da gibt es jetzt mehrere Möglichkeiten.

    zB
    1.
    int i;
    char s[X];
    sscanf(s, "%d", &i);

    2.
    du teilst ganzzahlig durch 10 und machst aus dem Rest ein ASCII Zeichen mit Zeichen=Rest+48, nimmst dann das Ergebnis der Division und teilst wieder durch 10 und so weiter bis die Division 0 ergibt

    oder 3. ...

    sast

    雅思特史特芬
    开发及研究

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.07.2004
    Ort
    Sennwald
    Alter
    27
    Beiträge
    103
    in etwa so??

    zahl_1 = adres/10;
    rest_1 = adres-(10 * zahl_1);
    lcd_setaddr(58 );
    lcd_putchar(rest_1+48 );
    zahl_2 = Zahl_1/10;
    rest_2 = Zahl_1-(10 * zahl_2);
    lcd_setaddr(52);
    lcd_putchar(rest_2+48 );
    zahl_3 = Zahl_2/10;
    rest_3 = Zahl_2-(10 * zahl_3);
    lcd_setaddr(46);
    lcd_putchar(rest_3+48 );




    das mit sscanf geht mit ccs nicht....also lass ich es vorerst so mit dividiren und rest und so.......ich bastel nur noch n' unterprogramm daraus wo ich startadresse und Zahl übergebe..... besten Dank!!!!!!

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.07.2004
    Ort
    Südhessen
    Beiträge
    1.312
    Es gibt in der C-Standardlib eine Funktion genannt itoa (Int to Ascii).
    Ich mache mir immer eine weitere Funktion:
    Code:
    void lcd_puti(uint8_t zahl)
    {
        char buffer[8];
        itoa(zahl, buffer, 10);
        lcd_puts(buffer);
    }

  7. #7
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    47
    Beiträge
    497
    in etwa ja, ABER als allererstes würde ich mal rausfinden ob die Zahl ein negatives Vorzeichen hat. Das setzt du dann zum Schluß auf dem LCD vorn an und machst natürlich aus zahl_1 eine positive Zahl vor der Berechnung. Sonst klappt das mit dem +48 nicht so wie du willst.

    sast

    EDIT: @thewulf00: das wäre zB Variante 3. Dazu muss itoa aber in küsäs Umgebung auch zur Verfügung stehen.

    雅思特史特芬
    开发及研究

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.07.2004
    Ort
    Südhessen
    Beiträge
    1.312
    Zitat Zitat von sast
    EDIT: @thewulf00: das wäre zB Variante 3. Dazu muss itoa aber in küsäs Umgebung auch zur Verfügung stehen.
    Das gehört zur Standard-Library in C. Wenn er ein ordentliches C verwendet, wird er es haben. (selbst wenn er dazu noch eine header includen muss)

  9. #9
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    47
    Beiträge
    497
    ok

    da ist dann auch div() und div_t mit dabei (meine lieblings-ganzzahl-division). Ich rate mal (hab gerade keine Quellen zu atoi) dass die das auch nicht viel anders machen, als bei 2.

    sast

    雅思特史特芬
    开发及研究

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.07.2004
    Ort
    Südhessen
    Beiträge
    1.312
    Nehme ich auch an.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •