ich bin im Moment mit meinem Programmierlatein am Ende.
Folgender Fall:
ich möchte einen signed long aus 4 Bytes zusammensetzen.
Das mache ich so.
(Auszug)
in der .h
Code: Alles auswählen
struct
{
....
long int ActualPosition;
.....
}AxisXStatus;
in der .cpp
Code: Alles auswählen
// 4 Byte in long konvertieren
// mit dem MSB beginnen und dann um ein Byte weiterschieben
AxisXStatus.ActualPosition = ReceiveData [12];
AxisXStatus.ActualPosition = (AxisXStatus.ActualPosition << 8);
AxisXStatus.ActualPosition |= ReceiveData [11];
AxisXStatus.ActualPosition = (AxisXStatus.ActualPosition << 8);
AxisXStatus.ActualPosition |= ReceiveData [10];
AxisXStatus.ActualPosition = (AxisXStatus.ActualPosition << 8);
AxisXStatus.ActualPosition |= ReceiveData [9];
qDebug () << ReceiveData [12] << "," << ReceiveData [11] << "," << ReceiveData [10] << "," << ReceiveData [9] << ":" << AxisXStatus.ActualPosition;
Steht z.B. in den Bytes 0,0,0,4 -> erhalte ich in der Ausgabe durch qDebug 4 (OK)
Steht z.B. in den Bytes 255,255,255,250 -> erhalte ich in der Ausgabe durch qDebug 4294967290 (falsch)
Wenn ich vor qDebug die Variable AxisXStatus.ActualPosition auf -123435 setze, -> erhalte ich in der Ausgabe durch qDebug -1234435 (OK)
Wenn ich statt long int nur int benutze, ist die Anzeige auch korrekt,bloß int reicht mir natürlich nicht.
Ist bei long int nicht auch das höchste Bit das Vorzeichenbit ?
Habe schon signed davor geschrieben, brachte aber auch nichts.
Könnte mir bitte jemand sagen, was ich falsch mache ?
Danke Euch
Bang Johansen