Forum: PC-Programmierung [C++ .NET] Konvertierungsproblem signed zu unsigned


von Patrick B. (p51d)


Lesenswert?

Hallo miteinander

Ich habe ein kleines Problem bei einem Projekt von mir:
Ausgangslage: Ich habe in einer Datei signed x-y Koordinatenpunkte (0/0 
ist Mittelpunkt), die ich an einem MCU senden muss. Dieser benötigt aber 
die Punkte unsigned (0/0 ist linke untere Ecke).
Wie kann ich dies jetzt machen? irgendwie mache ich wohl einen 
Denkfehler:
1
array<char> ^ buffer = System::IO::File::ReadAllBytes(openFileDialog1->FileName);
2
3
x_achse.Add(32768 + (unsigned int ((buffer[q + i] << 8) | buffer[q + i + 1])));
4
y_achse.Add(32768 + (unsigned int ((buffer[q + i + 2] << 8) | buffer[q + i + 3])));

Bei der Anzeige habe ich so auch noch Punkte am oberen Rand, welche da 
nicht hingehören oder bessergesagt nie dort sind (in der Datei);

Besten Dank für die Hilfe
MFG
Patrick

von A.H. (Gast)


Lesenswert?

Stimmen alle Punkte nicht, oder nur manche?

Mir fallen so aus der Ferne nur folgende mögliche Fehlerquellen auf:

1) Die Byte-Order in der Datei: Dein Code erwartet das höherwertige Byte 
zuerst. Das kann tatsächlich so sein, aber Windows-typisch wäre 
eigentlich Little-Endian, also  niedriges Byte zuerst.

2) Die
1
char
 im Array sollten "unsigned" sein, da sie sonst für die nachfolgenden 
Shift und OR Operationen vorzeichenrichtig erweitert werden. Besonders 
das niederwertige Byte läuft dann Amok.

3) Der Offset 32768 stimmt?

Probier das doch mal mit einer Datei aus, die nur wenige Punkte enthält, 
sodass du das Ergebnis komplett überprüfen kann.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.