aus CAN mach int mach unsigned int

Gast #1763872
Lesenswert?

Hallo Gemeinde!

Ich stehe (mangels Debugger) vor folgender Aufgabe:

Aus einem CANBusstrom werden zwei Bytes (5 und 4) herausgefischt, die 
zusammen eine Variable mit Werten 0 bis 65535 füllen sollen.

unsigned int Get_Rudder(void)

char Data[8];
unsigned int Rudder_Received;

Rudder_received = Data[5];
Rudder_received = rudderangle << 8;
Rudder_received = Data[4];


Frage: kann ich nun diese mit z.B. 34 beschriebene Variable an eine int 
übergeben ohne dass sich Tumult unter den Nullen breit macht?
Gast #1763900
Lesenswert?

GEILE SCHEISSE!!
Hast Du das grad extra für mich programmiert? Freu!

Ich komme meinem Problem gerade näher.... wenn ich eine unsigned int in 
eine int schiebe.... was muss ich beachten? Irgendein Bit ist doch für 
+/- zuständig, also kanns beim heiteren Nullenschieben doch knallen 
oder??
#1763902
Lesenswert?

Hc Zimmerer schrieb:
>> was zum Geier ist uint16_t??
>
> Siehe <stdint.h>.  Das gehört in die Werkzeugkiste jedes ernsthaften
> µC-C-Programmierers.

@TO
Was jedoch nicht heineingehört

> char Data[8];
> unsigned int Rudder_Received;
>
> Rudder_received = Data[5];
> Rudder_received = rudderangle << 8;

ist ein 'char' als Datentyp für ein Byte.
Das kann, je nach Compiler bzw. dessen Einstellungen, massig ins Auge 
gehen.
Gast #1763905
Lesenswert?

Karl heinz Buchegger schrieb:
> ist ein 'char' als Datentyp für ein Byte.
>
> Das kann, je nach Compiler bzw. dessen Einstellungen, massig ins Auge
>
> gehen

Jetzt verstehe ich, warum die Vorlagen meiner Kollegen kein einziges 
char beinhalten. Noch funzt´s mit char, aber wenn mein Text ins Reine 
geschrieben wird, werden die sicherlich auch ersetzt...
#1763909
Lesenswert?

Stephan R schrieb:
> GEILE SCHEISSE!!
> Hast Du das grad extra für mich programmiert? Freu!

Die Frage kommt jede Woche ungefähr 300 mal vor.

> Ich komme meinem Problem gerade näher.... wenn ich eine unsigned int in
> eine int schiebe.... was muss ich beachten?

Kann es sein, dass du dir erst mal deinen
Kernighan&Ritchie 'Programmieren in C' schnappen solltest, und ein paar 
Stunden mit Lesen und Übungen auf dem PC verbringen solltest?
#1763914
Lesenswert?

Stephan R schrieb:

> Jetzt verstehe ich, warum die Vorlagen meiner Kollegen kein einziges
> char beinhalten. Noch funzt´s mit char

Du willst an dieser Stelle keinen char haben.
Halte dich an diese Regel, und du hast weniger Probleme

Es gibt in C 3 Datentypen für kleine Integer

   signed char
        Für alles im Wertebereich -127 bis +128

   unsigned char
        Für alles im Wertebereich 0 bis 255

   char
        Der Compiler sucht sich aus, ob char ein Vorzeichen hat
        oder nicht.
        Praktisch gebrauchen kann man diesen Datentyp nur für
        Dinge, in denen es tatsächlich um Zeichen im Sinne von
        Textverarbeitung geht. Sobald es darum geht, einen Datentyp
        zu haben, der dem Prinzip nach eigentlich einen kleinen
        Integer aufnehmen soll, ist char zu meiden wie der Teufel
        das Weihwasser.


> aber wenn mein Text ins Reine
> geschrieben wird,

falsch.
Gleich richtig machen!
#1763949
Lesenswert?

Stephan R schrieb:
> Geht auch "C in 21 Tagen"?
> Den hab ich da...

Besser als nichts.

> Da ein signed int nur bis 32.768 reicht,

Genau genommen (bei 16 Bit int)
von -32767 bis +32768

> heißt das also, dass meine zwei
> ankommenden Bytes in ein unsigned speichern muss, richtig?

Das hat damit erst mal nichts zu tun :-)
sowohl ein signed int als auch ein unsigned int beanspruchen 2 Byte.

Wichtig ist: Was ist der Wert konzeptionell?
Hat der konzeptionell ein Vorzeichen oder hat er es nicht?
Das kannst aber nur du wissen, weil nur du weißt wo die Bytes herkommen 
und was die dadurch dargestellte Zahl repräsentiert.

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