Forum: Mikrocontroller und Digitale Elektronik uint32_t ist nur uint16_t


von Ulf C. (parabol1337)


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?

von Benedikt K. (benedikt)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


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).

von Johannes M. (johnny-m)


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...

von Sven P. (Gast)


Lesenswert?

Für sowas gibts schon seit einiger Zeit Konstanten: inttypes.h

von Ulf C. (parabol1337)


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

von Sven P. (Gast)


Lesenswert?

Wo sind wir denn überhaupt? PC, AVR...? Zuse Z1?

von Walter (Gast)


Lesenswert?

memtemp=99999L;

von Ulf C. (parabol1337)


Lesenswert?

wir sind hier auf einem AVR (ATmega16) =)

von (prx) A. K. (prx)


Lesenswert?

Ulf Cramme wrote:

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

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

von Sven P. (Gast)


Lesenswert?

Dann gilt erst Recht: stdint.h und inttypes.h benutzen.

von Karl H. (kbuchegg)


Lesenswert?

Zeig mal alles

von Ulf C. (parabol1337)


Lesenswert?

danke danke leute hab den Fehler gefunden


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

lu ist die Lösung

danke =)


Bis dann Ulf

von Sven P. (Gast)


Lesenswert?

Karl heinz Buchegger wrote:
> An dieser Stelle
>
>
1
>   memtemp=0x1869F;
2
>
>
> 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.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Ulf Cramme wrote:

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

avr-gcc mit -mint8

Johann

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.