Forum: Compiler & IDEs Casting für Dummie


von Christian Imann (Gast)


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?

von Claus Krause (Gast)


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

von Michael P. Jung (Gast)


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.

von Berndt Brandes (Gast)


Lesenswert?

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

Berndt

von Michael P. Jung (Gast)


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.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Beim mspgcc gibt's sys/types.h.

von Michael P. Jung (Gast)


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.

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.