Laden...

Als String gesendete Hexzahl ("0x7f") wieder in Zahl umwandeln

Erstellt von arakhsh_j vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.619 Views
Thema geschlossen
A
arakhsh_j Themenstarter:in
30 Beiträge seit 2010
vor 12 Jahren
Als String gesendete Hexzahl ("0x7f") wieder in Zahl umwandeln

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???

G
497 Beiträge seit 2006
vor 12 Jahren

da sollte UInt32.TryParse() funktionieren.

A
arakhsh_j Themenstarter:in
30 Beiträge seit 2010
vor 12 Jahren

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??

185 Beiträge seit 2005
vor 12 Jahren

Encoding.ASCII.GetString() und BitConverter.ToString() sollten dir weiterhelfen

4.221 Beiträge seit 2005
vor 12 Jahren

Und hier der Encoding-Tester...

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...

49.485 Beiträge seit 2005
vor 12 Jahren

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

Thema geschlossen