AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hex to String

Ein Thema von XXcD · begonnen am 9. Apr 2008 · letzter Beitrag vom 11. Apr 2008
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#11

Re: Hex to String

  Alt 9. Apr 2008, 23:48
Hmm ich würde mal sagen garnichts.

Ich habe einen Hexwert der so aussieht: 01001770010004
Den muss ich in ein String umwandeln und zu einen Server schicken.
Wenn ich jetzt die gegenprobe mache und das wieder in einen Hexwert umwandel passiert folgendes: 0117700104
Die 00 sind einfach weg.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#12

Re: Hex to String

  Alt 9. Apr 2008, 23:52
Das sind eindeutig Binärdaten und hexadezimal ist nur eine Darstellungsform. Somit glaube ich hier eher, dass du gar nicht richtig weisst, was du hier machst. Du willst Binärdaten dem Server schicken und somit ist der String nicht die geeignete Ablageform. Somit bekommst du diese Probleme.
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#13

Re: Hex to String

  Alt 10. Apr 2008, 00:01
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.
Und in Binärdaten gibt es nur 1 oder 0 und keine 7.
Ich kann auch nen anderen Hexwert zeigen, damit ihr überzeugt seit.

2061706F6C6F67697A6520666F7220616E7920696E636F6E76 656E69656E6365206361757365642E0D0A0D0A3C623E3

Hier könnt ihr euch übersetzen, dann seht ihr, dass es doch ein Hexwert ist.

Vielleicht hilft ja noch die Funktion mir der ich die Daten die ich empfange von strings in Hex werte umwandel:

Delphi-Quellcode:
function StrToHex(const S: String): String;
const
  HexDigits: array[0..15] of Char = '0123456789ABCDEF';
var
  I: Integer;
  P1: PChar;
  P2: PChar;
  B: Byte;
begin

  SetLength(Result, Length(S) * 2);
  P1 := @S[1];
  P2 := @Result[1];

  for I := 1 to Length(S) do
  begin
    B := Byte(P1^);
    P2^ := HexDigits[B shr 4];
    Inc(P2);
    P2^ := HexDigits[B and $F];
    Inc(P1);
    Inc(P2);
  end;

end;
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#14

Re: Hex to String

  Alt 10. Apr 2008, 00:38
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: Delphi-Referenz durchsuchenHexToBin() und Delphi-Referenz durchsuchenBinToHex()
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.774 Beiträge
 
Delphi 10.4 Sydney
 
#15

Re: Hex to String

  Alt 10. Apr 2008, 08:23
Guten Morgen,

mach Dir doch ein Array of Char
und wandel mit chr(StrToInt('$00')) die HexWerte die in Stringform vorliegen
wieder in den ByteCode (hier char) um.
Das Array kannst Du dann zum Server übertragen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#16

Re: Hex to String

  Alt 10. Apr 2008, 11:02
Ok das funktioniert genauso wie meine alte funktion.

Ich habe jetzt folgendes gemacht:

Delphi-Quellcode:
function HexStringToStr(d : string):string;
var
  I, s: Integer;
  n: string;
begin
s:=1;
for I := 1 to length(d) div 2 do
begin
n:= copy(d, s, 2);
Form6.packetinjecttemp.Text:=Form6.packetinjecttemp.Text+chr(StrToInt('$'+d));
s:= I * 2 + 1;
end;
end;
In Basic funktioniert die Function, da habe ich mir das ein wenig abgeschaut:

Code:
Public Function HexToString(sMessage As String) As String
Dim i As Integer
    For i = 1 To Len(sMessage) Step 2
        HexToString = HexToString & Chr(Int("&h" & Mid(sMessage, i, 2)))
    Next
End Function
Vielleicht weiß ja einer was da nicht stimmt.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.774 Beiträge
 
Delphi 10.4 Sydney
 
#17

Re: Hex to String

  Alt 10. Apr 2008, 11:22
..aber auch in dem Basic Beispiel sind
Zeichen mit einem AsciiWert von #0 nicht darstellbar.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#18

Re: Hex to String

  Alt 10. Apr 2008, 11:23
Hmmmmmm komisch da funktioniert das ganze ohne Probleme.
Was mache ich denn da falsch??
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.774 Beiträge
 
Delphi 10.4 Sydney
 
#19

Re: Hex to String

  Alt 10. Apr 2008, 11:39
Vielleicht machst Du ja nichts falsch.
Im Basic Beispiel werden die Daten auch nicht angezeigt.
Du packst sie in ein Editfeld oder Memo oder sonstwas.

Die Zeichen sind alle im String enthalten, sie können aber nicht
angezeigt werden.
Setzte Dir mal einen Haltepunkt und schau Dir mal den String mit Strg-F5 an.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#20

Re: Hex to String

  Alt 10. Apr 2008, 12:31
Hat sich erledigt, funktioniert alles gut.

Vielen Dank
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz