uint64_t: warning: left shift count >= width of type

Gast #492966
Lesenswert?
• ▲
▼
Hallo,

ich experimentiere gerade mit einem ENC28J60.

Da ich die MAC-Addressen nicht einem Char-Array speichern wollte, habe 
ich eine uint64_t-Variable (unsigned long long) genommen.

Ich habe mir dann ein Makro geschrieben, welches 6 einzelne Bytes in die 
eine Variable schreibt:
#define GET_MAC(MAC1, MAC2, MAC3, MAC4, MAC5, MAC6)    (((u08_t)MAC1) | 
(((u08_t)MAC2) << 8) | (((u08_t)MAC3) << 16) | (((u08_t)MAC4) << 24) | 
(((u08_t)MAC5) << 32) | (((u08_t)MAC6) << 40))


Allerdigs bekomme ich beim kompilieren immer die Fehler:
../main.c:27: warning: left shift count >= width of type
../main.c:27: warning: left shift count >= width of type
../main.c:27: warning: left shift count >= width of type
../main.c:27: warning: left shift count >= width of type


Wenn ich die Variable direkt angebe mit z.B. mac = 0x112233445566
Dann gibts auch nen Fehler. Da muss man dann noch ull hinterstellen wie 
z.B. mac = 0x112233445566ull

Aber wie mache ich das beim Makro? Habe mit ull schon versucht an 
versch. Stellen. Hat baer nicht funktioniert.
Gast #493144
Lesenswert?
• ▲
▼
Ich weiss ja nicht, worauf und womit du programmierst, aber wenn der 
Compiler als default-Datentyp int nimmt, (was anderes sagst du ihm ja 
nicht), dann erwartet der halt nur 16 bit.

(((u08_t)MAC3) << 16) | (((u08_t)MAC4) << 24) |
(((u08_t)MAC5) << 32) | (((u08_t)MAC6) << 40))

sind dann ausserhalb der 16 bit. Ergibt deine vier Warnungen.

Also mach zumindest aus den letzten vieren sowas wie

(((uint64_t)((u08_t)MAC6)) << 40)


Oliver

Antwort schreiben

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.

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.