Hallo,
ich habe folgendes Problem:
ich sende Daten von MC zu PC, die Daten werden im MC per printf und seriell an den pc geschickt.
zu synchronistaion sende ich am anfang jedes Datenpakets einen Zeilenumbruch mittels
printf("\n")
.
printf("%x",daten); // erste Daten byte ist die paketlaenge, 127 = 0x7f.
die werden dann durch printf als ascii zeichen an pc gesendet.
auf dem pc bekommen ich für oben beschribene Daten folgendes:
für \n -> 0x0d,
für 0x7f -> 0x0a
nun will ich die aber wieder zu normalen form umwandeln, d.h. anstatt 0x0a möchte die richtige paketlänge, also die zahl 127 = 0x7f haben.
wisst ihr wie ich das mit c# bewerkstelligen kann???
da sollte UInt32.TryParse() funktionieren.
Danke erstmal für die ANtwrot.
mit tryparse bekomme ich 0 für das zeichen "0x0a"
"0x0a"
UInt32.TryParse(hex, out DataLength);
// nach der operation ist der Datalength = 0x0000...
gibt es keinen anderen weg??
Encoding.ASCII.GetString() und BitConverter.ToString() sollten dir weiterhelfen
Und hier der Encoding-Tester...
Der Beantwortet so ziemlich jede Frage rund um Encodings
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Hallo arakhsh_j,
für \n -> 0x0d,
für 0x7f -> 0x0a
ich denke, du sitzt einem Irrtum auf. Das 0x0a ist der zweite Teil der Zeichenfolge \r\n (oder eben \0d\0a), zu der das \n durch printf expandiert wird. Die vier Zeichen 0, x, 7, und f, die durch das printf aus der Zahl 127 bzw. 0x7f werden, folgen erst danach. Die musst du alle einlesen, direkt als C# String oder als byte-Array, das du anschließend in einen C# String umwandelst. Aus dem C# String kannst du dann mit Convert.ToInt (String, Int) eine Zahl machen. Allerdings meine ich mich zu erinnern, dass man vorher noch das "0x" abschneiden muss.
Das fällt allerdings alles unter [Hinweis] Wie poste ich richtig? Punkt 1.1.1 und 1.1.
herbivore