Hallo,
ich versuche mich gerade in ein Programmcode einzuarbeiten. Ich habe
aber ein paar allgemeine Verständnisprobleme.
1 | void canMsgToTSRResult(const CCanMessage* canMsg, CTSRResultEMP2* sign)
|
2 | {
|
3 | const unsigned char* msgData = canMsg->MsgData;
|
4 |
|
5 | sign->SpeedLimitSign_kmh = (int) msgData[0];
|
6 | sign->SupplementarySignType = ((int) msgData[1])>>4;
|
7 | sign->NonSpeedLimitSignType = (((int) msgData[1]) >> 0) & 0x0F;
|
8 | sign->SignVisionOnlyDecision = (((int) msgData[6]) >> 5) & 0x03;
|
9 | sign->SignLaneAssignment = (((int) msgData[6]) >> 3) & 0x03;
|
10 | sign->bElectronicSign = (((int) msgData[6]) >> 2) & 0x01 ? 1 : 0;
|
11 | sign->Filter = (((int) msgData[7]) >> 4) & 0x0F;
|
12 | sign->DistanceToSign_m = (((int) msgData[7]) >> 0) & 0x0F;
|
13 | sign->DistanceToSign_m <<= 2; // unit: 4m
|
14 |
|
15 | if( 0 == sign->SpeedLimitSign_kmh )
|
16 | {
|
17 | sign->NonSpeedLimitSignType = SPEED_LIMIT_END;
|
18 | }
|
19 | }
|
Z.B. folgende Zeile
1 | sign->NonSpeedLimitSignType = (((int) msgData[1]) >> 0) & 0x0F;
|
Warum verschiebe ich etwas um 0 Stellen und warum verknüpfe ich es dann
mit 0x0F?? Wenn ich etwas mit UND verknüpfe und F, dann bleibt doch
alles erhalten wie es war oder nicht? Und wenn ich es mit 0 verknüpfe
lösche ich die Bits. Aber warum sollte ich die an dieser Stelle löschen?
Vielen Dank Leute!