Hallo habe ein Array Feld 0 und 1 data[0]=0x82; data[1]=0x6; ich will nun daraus 0x682 machen habe folgendes gemacht uint8_t data[2]; uint8_t ergebniss=0; ergebniss=data[1]<<8 & data[0]; es sollte dann 0x682 rauskommen.
Und wo ist jetzt die Frage?
Gast
#1963895
Andreas Herrmann schrieb: > ergebniss=data[1]<<8 & data[0]; du meintest sicher : ergebniss=data[1]<<8 | data[0]; //binäres oder, nicht und außerdem ist ergebniss mit 8 Bit zu klein, da steht dann auch nur das drin, was ind data[0] drinsteht. :-)
Andreas Herrmann schrieb: > uint8_t ergebniss=0; > ergebniss=data[1]<<8 & data[0]; > > es sollte dann 0x682 rauskommen. Und wie sollte das in ein uint8_t passen?
Hallo jetzt gehts uint16_t ergebniss=data[1]<<8 | data[0]; danke
Ich würde übrigens empfehlen, bei Shifts es immer in Klammern zu schreiben, also uint16_t ergebniss = (data[1] << 8) | data[0]; Ist zwar bei dem binären ODER nicht notwendig, aber z.B. das hier gibt nicht das gewünschte Resultat, obwohl man das auf den ersten Blick meinen würde: uint16_t ergebniss = data[1]<<8 + data[0]; da + und - eine höhere Ordnung als der Shift-Operator haben und es so ausgewertet wird: uint16_t ergebniss = data[1] << (8 + data[0]);
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.