[C++ .NET] Konvertierungsproblem signed zu unsigned

#1944182
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
Gast #1944249
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren