uint64 und sprintf

Gast #363794
Lesenswert?

> wie kann ich direkt ohne zu schiften eine 64 bit variable mit der
> sprintf function in ein char schreiben?

Gar nicht. Ein char hat normalerweise 8 bit, so daß deine Variable da
niemals reinpassen kann. Da du sprintf erwähnst, nehme ich mal an, daß
du ein Array aus char meinst und dieses als Text haben willst. Dann
könntest du mal %lld versuchen.
Moderator Persönliche Seite #363795
Lesenswert?

Nö, %lld ist im Moment nicht implementiert.  Sollte ich wohl
langsam mal tun, dann wächst die Vielfalt der printf-Optionen
nur noch weiter an:

. standard (kein float, kein int64_t)
. minimal (wie standard, aber keine Feldweiten und andere
  Extras)
. float (standard + float/double)
. int64 (standard + int64)
. everything (float + int64)

Der kanonische Weg, um an das richtige Format für einen uint64_t
zu kommen, wäre übrigens:
1
#include <inttypes.h>
2

3
...
4
  uint64_t u64var;
5
  ...
6
  sprintf(buf, "Die Zahl ist: " PRIu64, u64var);
Gast #363801
Lesenswert?

Ups. War ein bischen wenig.
Nein wenn ich das von dir beschrieben sprintf nehme.

sprintf(buf, "Die Zahl ist: %" PRIu64, u64var);

bekomme ich immer fehler meldungen beim übersetzten.
Muss den vor dem % nichts hin ? Da muss doch immer ein Typangabe stehen
oder?
#363802
Lesenswert?

Also im Link steht das Beispiel ohne '%':
1
#include <inttypes.h>
2
uint8_t smallval;
3
int32_t longval;
4
...
5
printf("The hexadecimal value of smallval is " PRIx8
6
       ", the decimal value of longval is " PRId32 ".\n",
7
       smallval, longval);

Wobei ich in der Definition von PRIx8 ...
1
#define   PRIx8   "x"
... irgendwie das '%' vermisse. Wird der String nicht nach:

'The hexadecimal value of smallval is x , the decimal value of longval
is ...' gewandelt? Komisch.

Grüße,
Freakazoid
Persönliche Seite #363803
Lesenswert?

.

  Nein wenn ich das von dir beschrieben sprintf nehme.

  sprintf(buf, "Die Zahl ist: %" PRIu64, u64var);

  bekomme ich immer fehler meldungen beim übersetzten.

Wenn Du Fehlermeldungen beim Übersetzen bekommst (welche*?), dann liegt
es nicht am Formatstring, denn dessen Inhalt wird beim Übersetzen
nicht ausgewertet. Ob da kompletter Quark drinsteht, oder nicht, wirkt
sich erst zur Laufzeit des Programmes aus.


*) Wieso eigentlich wimmelt dieses Forum von Leuten, die bei
Fehlermeldungen des Compilers zwar feststellen, daß das welche sind,
aber nicht in der Lage sind, diese bei Fragen wiederzugeben?
Moderator Persönliche Seite #363804
Lesenswert?

> Wieso eigentlich wimmelt dieses Forum von Leuten, die bei
> Fehlermeldungen des Compilers zwar feststellen, daß das welche sind,
> aber nicht in der Lage sind, diese bei Fragen wiederzugeben?

Frage ich mich auch öfters.  Manche Leute wollen offenbar partout
einen Controller (auf dem es sich ja nun wirklich saumäßig bescheiden
debuggen lässt) in C programmieren, obwohl sie keine Lust haben, C
einfach erstmal auf einem gut debugbaren Universalcomputer zu
erlernen.  Außerdem muss man offenbar anfangen, C zu hacken, ohne sich
die Mühe zu machen, die von papiergebunden (kann man ja auch in einer
guten Bibliothek ausfassen, wenn man's nicht kaufen will) bis
kostenlos im Internet verfügbaren vielen Einsteigerwerke auch nur
ansatzweise zu bemühen.

Zurück zum Problem:

Ich schrieb doch eigentlich klar und deutlich, dass es derzeit keine
Implementierung eines printf-Formats in der avr-libc gibt, die es
gestatten würde, einen uint64_t in eine Zeichenfolge umzusetzen.  Das
ist ein `nice to have' feature, ich werde das sicher bei Gelegenheit
mal angehen, aber wie sagen die Amis so schön: ``Don't hold your
breath.''
Gast #363805
Lesenswert?

> Wenn Du Fehlermeldungen beim Übersetzen bekommst (welche*?), dann
> liegt es nicht am Formatstring, denn dessen Inhalt wird beim
> Übersetzen nicht ausgewertet.

Gute Compiler werten den sehr wohl aus. gcc macht das (sofern die
verwendete libc printf das entsprechende Attribut mitgibt - ich weiß
nicht, ob die avr-libc das macht) und manch anderer wohl auch.
Allerdings gibt's dann beim falschen Formatstrings normalerweise nur
eine Warnung.

> *) Wieso eigentlich wimmelt dieses Forum von Leuten, die bei
> Fehlermeldungen des Compilers zwar feststellen, daß das welche
> sind, aber nicht in der Lage sind, diese bei Fragen wiederzugeben?

Das ist eine gute Frage. Aber das ist doch immerhin schon was. Oft wird
gern auch nur eine einzige Zeile Code, die mit dem Fehler nichts zu tun
hat, gepostet und der Hinweis, daß das nicht funktioniert, so daß man
nicht mal weiß, ob der Compiler eine Fehlermeldung gebracht hat oder
der Linker, oder ob das Programm nur nicht das Erwartete tut.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren