Umrechnung digitalwerte

Gast #405810
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.
Gast #405811
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.
Gast #405815
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren