www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik uint32_t ist nur uint16_t


Autor: Ulf Cramme (parabol1337)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi leute nach lange rum gucken ist mir folgendes aufgefallen
[c]
uint32_t memtemp;

memtemp=0x1869F;

sprintf(buffer, "%6i", memtemp);
[c]
gibt mir statt 99999 -> 31073 aus.

bei 9999 funzt es noch einwandfrei.. mein gedanke war jetzt kann das 
sein das er nur mit 16 bit arbeiten kann?

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falls das ganze auf einem System mit sizeof(int)=2 (16bit) läuft, dann 
sollte sprintf(buffer, "%6li", memtemp); das richtige Ergebnis liefern.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
%i instruiert sprintf, einen int zu erwarten.

Somit wird der übergebene 32-Bit-Wert als 16-Bit-Wert interpretiert (mal 
angenommen, daß sizeof (int) auf Deinem System 2 ist).

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Option "i" kennzeichnet einen (signed) int, und der geht nunmal nur 
von -32768...32767. Schau mal in die Bibliotheksdoku. Du brauchst 
erstens mal kein "i", sondern ein "u", denn Du möchtest einen 
vozeichenlosen Wert ausgeben. Außerem muss da zusätzlich noch ein 
"l" mit rein, damit es ein unsigned long wird...

EDIT:
Oha, wieder mal viiiel zu lahm...

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für sowas gibts schon seit einiger Zeit Konstanten: inttypes.h

Autor: Ulf Cramme (parabol1337)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi danke schon mal für die vielen Antworten hab mal folgendes getestet


memtemp=99999;

sprintf(buffer, "%6ul", memtemp);


Ergebnis: 34463

=)
was könnte noch falsch sein? sizeof = 2? was ist damit gemeint. bin noch 
ein Anfänger


danke schon mal

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo sind wir denn überhaupt? PC, AVR...? Zuse Z1?

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
memtemp=99999L;

Autor: Ulf Cramme (parabol1337)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wir sind hier auf einem AVR (ATmega16) =)

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ulf Cramme wrote:

> sprintf(buffer, "%6ul", memtemp);
> Ergebnis: 34463

Interessant. Müsste so eigentlich 34463l rauskommen. "lu" statt "ul" 
wäre besser.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann gilt erst Recht: stdint.h und inttypes.h benutzen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zeig mal alles

Autor: Ulf Cramme (parabol1337)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke danke leute hab den Fehler gefunden


sprintf(buffer, "%6lu", memtemp);

lu ist die Lösung

danke =)


Bis dann Ulf

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger wrote:
> An dieser Stelle
>
>
>   memtemp=0x1869F;
> 
>
> ist das F nicht so prickelnd. Du willst ganz sicher keine Floating Point
> Zahl in ihrer Hex-Repräsentierung angeben.

Ist egal, hier zählt F nicht als Float-Endung, sondern als Ziffer. Aber 
'L' kann man sehr wohl anhängen.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ulf Cramme wrote:

> =)
> was könnte noch falsch sein?

avr-gcc mit -mint8

Johann

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.