AGB  ·  Datenschutz  ·  Impressum  







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

Hexadezimalstring in: #$String

Ein Thema von napsterxx · begonnen am 14. Feb 2009 · letzter Beitrag vom 14. Feb 2009
Antwort Antwort
Seite 1 von 2  1 2      
napsterxx

Registriert seit: 18. Mär 2007
Ort: Borland
556 Beiträge
 
Delphi 7 Enterprise
 
#1

Hexadezimalstring in: #$String

  Alt 14. Feb 2009, 12:05
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.
Du derefernzierst p2 einmal und weißt die Adresse von i zu. Das heißt p2 (also der Zeiger auf einen Zeiger) zeigt auf den Zeiger p1 welchen du so auf i zeigen lässt.
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#2

Re: Hexadezimalstring in: #$String

  Alt 14. Feb 2009, 12:13
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
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
napsterxx

Registriert seit: 18. Mär 2007
Ort: Borland
556 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Hexadezimalstring in: #$String

  Alt 14. Feb 2009, 12:29
Von welchem Typ muss das Array sein, und was bewirkt dieses Append?
Du derefernzierst p2 einmal und weißt die Adresse von i zu. Das heißt p2 (also der Zeiger auf einen Zeiger) zeigt auf den Zeiger p1 welchen du so auf i zeigen lässt.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#4

Re: Hexadezimalstring in: #$String

  Alt 14. Feb 2009, 12:39
Geh doch einfach den String durch, kopiere 2 Zeichen, füge da '#$' vorne an und häng das ans Ergebnis an.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
napsterxx

Registriert seit: 18. Mär 2007
Ort: Borland
556 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Hexadezimalstring in: #$String

  Alt 14. Feb 2009, 13:07
So habe ich es gemacht, aber aus irgendeinem Grund hat das nicht funktioniert, wurde immer nur ein Byte versendet.
Du derefernzierst p2 einmal und weißt die Adresse von i zu. Das heißt p2 (also der Zeiger auf einen Zeiger) zeigt auf den Zeiger p1 welchen du so auf i zeigen lässt.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#6

Re: Hexadezimalstring in: #$String

  Alt 14. Feb 2009, 13:13
Da ich nicht genau weiß, was FSock ist, mutmaße ich mal:
Fsock.Send(@buffer_[1],length(buffer_)); Man beachte das @.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#7

Re: Hexadezimalstring in: #$String

  Alt 14. Feb 2009, 16:31
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
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#8

Re: Hexadezimalstring in: #$String

  Alt 14. Feb 2009, 16:41
Zitat von DeddyH:
Da ich nicht genau weiß, was FSock ist, mutmaße ich mal:
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 @...
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#9

Re: Hexadezimalstring in: #$String

  Alt 14. Feb 2009, 17:31
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
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Hexadezimalstring in: #$String

  Alt 14. Feb 2009, 17:57
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:52 Uhr.
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