Zitat von
XXcD:
Und in Binärdaten gibt es nur 1 oder 0 und keine 7.
Wer hat dir denn das geflüstert? Ein Binärwert hat nur 0 und 1 - und ist wiederrum (mal) wieder nur eine Darstellungsform. Die Daten selber sind in unterschiedlich grossen Datentypen organisiert. Als kleinste Einheit gibt es das Byte (es gibt logisch kleinere Einheiten, z.B. ein Nibble) und dies kann 2^8 (256) unterschiedliche Werte annehmen (0..255). Das nicht alle diese Werte im
ASCII einfach nur dargestellt werden können, liegt daran, dass die Zeichen im unteren Bereich Steuerzeichen sind und diese bestimmte Funktionen erfüllen.
So, wenn wir nun von Binärdaten sprechen, dann hier mal ein Beispiel:
Du nimmst einen Integer mit einem Wert von 3. Diesen kannst du nun sehr schön ausgeben:
binär: 00000000 00000000 00000000 00000011
oktal: 000003
dezimal: 4
hexadezimal: 00 00 00 03
etc, etc, etc
Und wenn du ihn als String darstellst bzw. als Zeichen bekommst du #0#0#0#3 und das sind Steuerzeichen.
Wenn du nun das ganze nicht als Integer sondern als eine Zusammenfassung von 4 Bytes mit einer gewissen Priorisierung bzw. Anordung, dann hast du den Binärwert des Integers. Binärwerte haben einen gewissen Umfang von Bytes und geben keine Interpretation der Daten wieder sondern nur die Daten. Die Darstellungsformen wiederrum benötigen einen interpretierten Datenwert - hier interpretiert als Integer. Dieser definiert sich dadurch, dass er 4 Bytes benötigt, das oberste Byte kommt zuerst im Speicher, das unterste zuletzt. Das oberste Bit (31. Bit) gibt das Vorzeichen an. Mit diesen Informationen kann man die Binärdaten bewerten und dementsprechend verarbeiten.
Deine Ketten sind definitiv Binärdaten und haben spezielle Bedeutungen. Diese Bedeutungen solltest du entsprechend nutzen und interpretieren. Wenn der Server z.B: ein Datenpacket wie dieses braucht: (hex) 00 03 00 04 22 0A, dann sieht das zwar in Hex recht schön aus, sagt aber nichts über die Bedeutung/Bewertung der einzelnen Bits und Bytes aus.
Die selben Daten als Struktur:
1. Byte: Type (0 = Antwort, 1 = Anfrage, 2 = Status, etc)
2. Byte: Message Identification (01 = Server Version, 02 = Server Status, 03 = etc)
...
usw.
Somit kannst du diese Struktur in einem Record definieren und entsprechend interpretieren, aufbauen, auslesen. Diesen Record im Speicher wird genauso abgelegt wie die hexadezimale Darstellung es darlegt. Der Typ der Daten wird mit der Struktur definiert und somit kann man sie interpretieren.
Du hingegen hast bisher nur Bytes aneinander gereiht. Auch die Strings die du nachher sendest haben eine entsprechende Bedeutung. Es kommt mir eher so vor, als wenn du diese ganzen Daten einfach mit einem Sniffer mitgelesen hast und ohne zu wissen was sie im einzelnen bedeuten kommunizierst du mit dem Server.
Ob da nun kriminelle Energie zu Grunde liegt oder was auch immer, ist eine Interpretationsfrage. Grundlegend aber, fehlt hier offensichtlich Wissen deinerseits. Schon allein die Aussage
XXcD
ohhh ihr wisst nicht was ich meine es sind keine Binärdaten, es sind einfach nur Befehle an den Server die nicht als Text sein sollen sondern als Befehle.
bestätigt meine Annahme. Also entweder mehr Informationen und wissen was man tut, oder du kannst dies nicht entsprechend liefern (andere Vermutung).
Zitat von
XXcD:
Vielleicht hilft ja noch die Funktion mir der ich die Daten die ich empfange von strings in Hex werte umwandel:
Du übergibst einen String - bzw. du empfängst Daten und legst diese in einem String ab. Das bedeutet doch nicht, dass es ein String ist.
Du legst Binärdaten in einem String ab - der ist nicht dazu gedacht. Und schon ist es definitiv ein String?
Ich kann auch meine EXE in einem String ablegen, aber es definitiv der falsche Kontainertyp dafür. Aber egal, du weisst es ja besser.
Und zu deiner Funktion: es gibt vorgefertigte Funktionen für beide Richtungen. Beide wurden aber schon gepostet in diesem Thread:
HexToBin() und
BinToHex()