DWORD in byte umwandeln

dengel

Mitglied
Hallo alle miteinander!

Ich versuche gerade eine DWORD Variable in eine BYTE Variable zu konvertieren! Doch leider funktioniert das nicht!

Code:
if(g_CAN_Write !=NULL) // function pointer vallid
 
{
 
	schacht = temp.ID & 0x007;
 
	temp.ID = 0x1A8 + schacht;
 
	temp.LEN = 1;
 
	//temp.ID ist vom Typ DWORD
	byte data = (byte)(temp.ID & 0x01F8);
 
	data = data >> 3;
 
	data = data | 0xC0;
 
	//temp.DATA ist vom Typ byte
	temp.DATA[0] = data;
 
	temp.DATA[1] = 0x00;
 
	temp.DATA[2] = 0x00;
}

Kann mir von Euch vielleicht jemand weiterhelfen?
Bin für jede Hilfe Dankbar!

Gruß dengel
 
Zuletzt bearbeitet:
Hi.

Beschreib doch mal bitte etwas genauer was das ganze machen soll und warum es nicht funktioniert - also was die Eingabe ist, was du erwartest und was die Ausgabe ist.
 
Hallo deepthroat,

also ich empfange ein CAN Telegramm, das ich auswerten will! Aus dem Identifier muss ich eintelne Bits herausverunden!

Wie z.B. hier:

schacht = temp.ID & 0x007;

Die letzten drei bits brauch ich nicht! Darum verschiebe ich das ganze um 3 Stellen nach rechts!

Nun möchte ich den neuen Wert, der noch das Format DWORD hat, in eine Byte Variable umwandeln um diese dann wieder verschicken zu können!

Ich hoffe du kannst mit meiner Beschreibung was anfangen!

Gruß dengel
 
Ja, ok. Ich hätte halt nur gern ein Beispiel gehabt. So das ich sehen kann, wenn z.B. temp.ID den Wert 0xc1eef2ab hat, was dann deiner Meinung nach rauskommen sollte und was im Programm tatsächlich rauskommt.

Eine Sache ist zumindest ein bißchen merkwürdig:
Code:
byte data = (byte)(temp.ID & 0x01F8);
du nimmst hier den Wert 0x01F8 als Operanden für das bit-UND. Warum? Wenn der Wert in ein Byte umgewandelt wird, fällt das 9te Bit sowieso weg. Warum nicht einfach 0xF8?

Hast du denn schonmal mit einem Debugger genauer geschaut was da so berechnet wird?
 
Zurück