Casting für Dummie

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

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.