Moinsen habe mal eine kleine Frage! Bitte nicht drüber lachen! folgender Code deklaration der Variable unsigned int ergebnis; später im Code soll die Variable über den CAN Bus verschickt werden message...blahsülz[0]=(unsigned char)(ergebnis & 0x00ff); message...blahsülz[1]=(unsigned char)(ergebnis / 256); mir geht es um den letzten Teil der Message was wird da mit "ergebnis" gemacht (warum) und wie funktioniert das? Danke für alle Antworten.
>message...blahsülz[1]=(unsigned char)(ergebnis / 256);
"/256" kann man auch durch ">>8" ersetzen.
Das Int-Wort wird um 8 bit nach rechts verschoben. Dadurch wandert das
höherwertige Byte an die Stelle des niederwertigen.
Durch den Cast zum unsigned char wird der "obere Teil" des Int
abgeschnitten, und man behält den untern Teil über.
Aha und wie mache ich das ganze wieder rückgängig auf der empfängerseite? Und was ist mit der message0?
Den ersten Wert, den du empfängst, speichern (in Variable). Den Zweiten mit 256 multiplizieren, und beide Werte addieren.
EmpfangBlafaselInt = ((unsigend int) message...blahsülz[1]<<8) | message...blahsülz[0];
Hinweis, wenn ergebnis als "int" definiert wäre: "/256" und ">>8" kann bei negativen Zahlen unterschiedlich sein. AFAIK ist die Definition der Rundung bei negativen Zahlen bei ANSI-C nicht standardisiert und somit Compiler-abhängig. z.B. bei MS VisualStudio 6: (-5)/2 ergibt -2 (-5)>>1 ergibt -3
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.