www.mikrocontroller.net

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


Autor: Patrick B. (p51d)
Datum:

Bewertung
0 lesenswert
nicht 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:
array<char> ^ buffer = System::IO::File::ReadAllBytes(openFileDialog1->FileName);

x_achse.Add(32768 + (unsigned int ((buffer[q + i] << 8) | buffer[q + i + 1])));
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

Autor: A.H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.