www.mikrocontroller.net

Forum: Compiler & IDEs Casting für Dummie


Autor: Christian Imann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin.
MSPGCC, C-Code?
Wie caste ich den Quotient aus zwei Chars zurück in ein Char?

Weitere Frage:
Darf ich für Int-Werte 0..255 den Typ Char benutzen oder muß ich mit
der Option -8int compilieren?

Autor: Claus Krause (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mahlzeit Christian,

du kannst beliebige Werte casten, indem du sie in Klammern setzt und
die Klammer castest:
(char)( 100 / 50 )

Es mußt stets beachtet werden, wie der Compiler die verwendeten Typen
betrachtet. int ist nicht gleich int, mancher Compiler will 16Bit
mancher 32Bit dafür verwenden! Über die Typdefinitionen unbedingt vor
Benutzung informieren. Manche Compiler sehen den Typ char standardmäßig
als unsigned, manche als signed an.

Wenn du einen int hast, dessen Wertebereich stets von 0..255 reicht, so
kannst du ihn einfach in einen unsigned char casten:
int i = 50;
unsigned char uc = 0;
uc = (unsigned char)i;

Option -8int ist also unnötig.


Grüße,
Claus

Autor: Michael P. Jung (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es waere schoen, wenn man MSPGCC bzw AVRGCC eine stdint.h verpassen
wuerde. Die in ANSI C99 definierten Typen sind sehr praktisch und
explizit. - Ich arbeite in meinen ia32/ia64/... (keine mikrocontroller
- da noch nicht verfuegbar)  Programmen nur noch mit diesen Typen, da
sie die Portabilitaet extrem steigern.

z.B.:
uint8_t := 8 bit unsigned integer
int64_t := 64 bit signed integer
...

Es sollte wohl keinen grossen Aufwand darstellen dieses Headerfile fuer
MSPGCC/AVRGCC zu erstellen. Hat jemand eine Idee wie man dieses
Headerfile moeglichst portabel gestalten koennte? Am besten waere es
natuerlich, wenn man an dem Ur-Header garnichts aendern muesste sondern
lediglich ein bits/ file aendern muesste. Ich habe die
Include-reihenfolge mal grob verfolgt, blicke da jedoch noch nicht ganz
durch.

Autor: Berndt Brandes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Michael:
für AVRGCC gibts die Includedatei (heißt inttypes.h).
MSPGCC weiß ich nicht.

Berndt

Autor: Michael P. Jung (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, bei MSPGCC ist soetwas nicht dabei. Desweiteren dienen die dateien
inttypes.h und stdint.h zwei unterschiedlichen zwecken:

inttypes.h: ISO C99: 7.8 Format conversion of integer types
<inttypes.h>
stdint.h: ISO C99: 7.18 Integer types <stdint.h>


inttypes.h includiert stdint.h, jedoch nicht anderstherum. Die Integer
typen mit expliziter groessenangabe sind in stdint.h definiert.

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim mspgcc gibt's sys/types.h.

Autor: Michael P. Jung (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Interresant - ich habe eben <sys/inttypes.h> entdeckt mit einer ganzen
Menge typedefs:

typedef signed char int8_t;
typedef unsigned char uint8_t;
typedef int int16_t;
typedef unsigned int uint16_t;
typedef long int32_t;
typedef unsigned long uint32_t;
typedef long long int64_t;
typedef unsigned long long uint64_t;
typedef int16_t intptr_t;
typedef uint16_t uintptr_t;

Wunderbar, da gibt es ja keinen Grund mehr stdint.h zu vermissen. Ich
finde es dennoch seltsam, dass der MSPGCC nicht dieses Ansi C99 File
mitbringt.

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.