Forum: Mikrocontroller und Digitale Elektronik Umrechnung digitalwerte


von Tobias Meier (Gast)


Lesenswert?

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.

von inoffizieller WM-Rahul (Gast)


Lesenswert?

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

von Tobias Meier (Gast)


Lesenswert?

Aha und wie mache ich das ganze wieder rückgängig auf der
empfängerseite?
Und was ist mit der message0?

von Klaus______ (Gast)


Lesenswert?

Den ersten Wert, den du empfängst, speichern (in Variable). Den Zweiten
mit 256 multiplizieren, und beide Werte addieren.

von inoffizieller WM-Rahul (Gast)


Lesenswert?

EmpfangBlafaselInt = ((unsigend int) message...blahsülz[1]<<8) |
message...blahsülz[0];

von n/a (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.