- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 8 von 8

Thema: Int wert in String umwandeln, aber wie?

  1. #1

    Int wert in String umwandeln, aber wie?

    Anzeige

    E-Bike
    Hi,
    ich möchte am A/D Wandler im ATmega16 einen Analogwert einlesen und diesen auf einem Display ausgeben. Der Wert steht als uint16_t zur Verfügung und soll in einen string umgewandelt werden.
    Dazu habe ich folgenden Tip von einem Kollegen bekommen:


    unsigned int int_to_char (uint16_t a)

    {
    unsigned int b;

    itoa(a,b,10);
    return b;
    }

    Der return Wert ist immer null...
    auch wenn ich den Wert für a direkt in dem Programmteil von Hand zuweise.
    Was mache ich falsch?

    Gruß Ulli

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    itoa(int a, char* b, in len);

    heisst a ist der wert, b ist ein zeiger auf ein string (char-array) und die länge gibt die maximale länge des strings an!

    1024 sollte maximalewert sein also reicht ne länge von 4
    Code:
    void int_to_char (uint16_t a, char* target)
    
    {
    
    itoa(a,target,5);
    }
    
    und in der main dann irgendwo:
    
    ...
      char myString[5]; // 5 hier weil ein String immer 0 terminiert ist
      int_to_char(ADC, myString); // beachte da myString als Array definiert ist 
                                                // ist der Bezeichner myString OHNE "[]" automatisch ein pointer
    ...
    und myString kannste dann einfach versenden

    PS: OT: ich mag stufenheck auch lieber ... deshalb iss mein auto schon 17 jahre alt ... die neuen sehen alle aus wie gelutschte bonbons

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Sollte es nicht so heißen
    Code:
    unsigned int b[6];
    Für eine max. 6 stellige Anzeige.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    25.10.2007
    Ort
    41462 Neuss
    Alter
    56
    Beiträge
    375
    gib bei google "itoa" ein und lies dir durch was dieser befehl macht, und wie er es macht (d.h. welche parameter man übergeben muss)!

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.12.2004
    Alter
    40
    Beiträge
    165
    Zitat Zitat von Ceos
    itoa(int a, char* b, in len);
    nein.

    Zitat Zitat von avrlibc doku
    char* itoa ( int __val,
    char * __s,
    int __radix
    )
    Convert an integer to a string.

    The function itoa() converts the integer value from val into an ASCII representation that will be stored under s. The caller is responsible for providing sufficient storage in s.

    Note:
    The minimal size of the buffer s depends on the choice of radix. For example, if the radix is 2 (binary), you need to supply a buffer with a minimal length of 8 * sizeof (int) + 1 characters, i.e. one character for each bit plus one for the string terminator. Using a larger radix will require a smaller minimal buffer size.
    Warning:
    If the buffer is too small, you risk a buffer overflow.
    Conversion is done using the radix as base, which may be a number between 2 (binary conversion) and up to 36. If radix is greater than 10, the next digit after '9' will be the letter 'a'.

    If radix is 10 and val is negative, a minus sign will be prepended.
    radix ist uebrigens englisch und heisst Basis, bei radix 10 befindet man sich also im Dezimalsystem.

    HTH

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    oh verzeihung ... habs selber noch net benutzt, aber meine es so gelesen zu haben >_<

    @Hubert nein, du willst schliesslich einen string füllen und der besteht nun mal aus character(char) und immer fein auf die nullterminierung des strings achten ^^

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    55
    Beiträge
    524
    Hallo,

    void int_to_char (uint16_t a, char* target)
    das hier ist gut und wichtig. Es wird nur der Zeiger auf den Speicherbereich für den String an die Funktion übergeben. Die Reservierung des Speichers erfolgt außerhalb. Wir der Speicher für den String innerhalb der Funktion reseviert, gibt es ein kleines fieses Gültigkeitsproblem.
    Gruß

    Jens

  8. #8
    Vielen Dank an Ceos und fluchtpunkt, hat geklappt.
    (Auch wenn ich 6h später auf "dtostrf" umgestiegen bin zwecks kommawerte, es hat mir geholfen)

    OT; @Ceos: Was fährst du denn?
    Bin auch ein freund der markanteren Karosserieformen
    Meine Autos waren im Schnitt beim Kauf 20 Jahre alt,
    mein jüngster war beim Kauf 15, den fahre ich grade (Honda Prelude).
    Mein Ältester ist ein 82er VW Derby, der steht vorm Haus und wartet auf den Sommer

Berechtigungen

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

12V Akku bauen