Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Hexadezimalstring in: #$String (https://www.delphipraxis.net/129200-hexadezimalstring-%24string.html)

napsterxx 14. Feb 2009 11:05


Hexadezimalstring in: #$String
 
Also ich habe hier einen Hexadezimal String, der sieht so aus:
Zitat:

0D14000058C157C14AAFB2001900000013000000
ich wollte mir eine Routine schreiben, das ich ihn so senden kann:
Delphi-Quellcode:
buffer_ := $0D#$14#$00#$00#$58#$C1#$57#$C1#$4A#$AF#$B2#$00#$19#$00#$00#$00#$13#$00#$00#$00;
Fsock.Send(buffer_[1],length(buffer_));
Aber keine Ahnung wie das Funktionieren soll.

r2c2 14. Feb 2009 11:13

Re: Hexadezimalstring in: #$String
 
Delphi-Quellcode:
//Pseudocode:
  for i = 1 to Length(s) step 2 do
  begin
    byte := StrToInt('#$' + s[i] + s[i+1]);
    AppendToArray(arr, byte);
  end;
  Socket.Send(arr);
mfg

Christian

napsterxx 14. Feb 2009 11:29

Re: Hexadezimalstring in: #$String
 
Von welchem Typ muss das Array sein, und was bewirkt dieses Append?

DeddyH 14. Feb 2009 11:39

Re: Hexadezimalstring in: #$String
 
Geh doch einfach den String durch, kopiere 2 Zeichen, füge da '#$' vorne an und häng das ans Ergebnis an.

napsterxx 14. Feb 2009 12:07

Re: Hexadezimalstring in: #$String
 
So habe ich es gemacht, aber aus irgendeinem Grund hat das nicht funktioniert, wurde immer nur ein Byte versendet.

DeddyH 14. Feb 2009 12:13

Re: Hexadezimalstring in: #$String
 
Da ich nicht genau weiß, was FSock ist, mutmaße ich mal:
Delphi-Quellcode:
Fsock.Send(@buffer_[1],length(buffer_));
Man beachte das @.

r2c2 14. Feb 2009 15:31

Re: Hexadezimalstring in: #$String
 
Zitat:

Zitat von napsterxx
Von welchem Typ muss das Array sein,

Array of Byte. Alternativ geht auch n (Ansi)String.

Zitat:

und was bewirkt dieses Append?
Es soll das ans Array anhängen. Wie gesagt: Das is nur Pseudocode. Soll dir nur zeigen, wie es prinzipiell geht.

Zitat:

So habe ich es gemacht, aber aus irgendeinem Grund hat das nicht funktioniert, wurde immer nur ein Byte versendet.
Dann zeig doch einfach mal, was du gemacht hast. Meine Glaskugel hat grad Urlaub...

@DeddyH: Ich vermute, dass das @ a) nicht das Problem ist und b) hier falsch ist. Wenn ich das implementieren würde, dann würd ich einfach n var-Parameter nehmen. Damit braucht man das fehlerträchtige @ nicht. Du hast aber recht damit, dass es theoretisch auch n Pointer sein könnte und dann bräuchte man das @...

mfg

Christian

DeddyH 14. Feb 2009 15:41

Re: Hexadezimalstring in: #$String
 
Zitat:

Zitat von DeddyH
Da ich nicht genau weiß, was FSock ist, mutmaße ich mal:

Zitat:

Zitat von r2c2
@DeddyH: Ich vermute, dass das @ a) nicht das Problem ist und b) hier falsch ist. Wenn ich das implementieren würde, dann würd ich einfach n var-Parameter nehmen. Damit braucht man das fehlerträchtige @ nicht. Du hast aber recht damit, dass es theoretisch auch n Pointer sein könnte und dann bräuchte man das @...

:glaskugel:

brechi 14. Feb 2009 16:31

Re: Hexadezimalstring in: #$String
 
Delphi-Quellcode:
var
  buf: array of byte;
  i, c: Integer;
  s: String;
begin
  s := '000d040507acf54d';
  c := Length(s) div 2;
  SetLength(buf, c);
  for i := 1 to c do
    buf[i] := StrToInt('$'+s[i*2-1]+s[i*2]);
  socket.send(buf[1], SizeOf(Buf));
end;
so in der art würd ich ma sagen

Hawkeye219 14. Feb 2009 16:57

Re: Hexadezimalstring in: #$String
 
Hallo,

die Konvertierung kann auch recht einfach mit Bordmitteln durchgeführt werden:

Delphi-Quellcode:
// uses Types, Classes

procedure Convert (const s: string; var Buffer: TByteDynArray);
begin
  SetLength (Buffer, Length(s) div 2);
  SetLength (Buffer, HexToBin(PChar(LowerCase(s)), @Buffer[0], Length(Buffer)));
end;

// Anwendung:

var
  Buffer : TByteDynArray;
begin
  Convert ('0D14000058C157C14AAFB2001900000013000000', Buffer);
  Socket.Send (Buffer[0], Length(Buffer));
end;
Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:22 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz