Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Vermutlich Hex Daten Umwandeln (https://www.delphipraxis.net/200226-vermutlich-hex-daten-umwandeln.html)

Dumpfbacke 31. Mär 2019 17:46

Vermutlich Hex Daten Umwandeln
 
Hallo Delphianer,
ich habe hier eine Firebird Datenbank mit einem MemoFeld. Dort in dem MemoFeld sind einige Daten vorhanden. Wenn ich mir das ganze mittels IBExpert as Hex anzeigen lassen so kann ich dort das gewünschte erkennen.

Beispiel: (Auszug aus dem ganzen. Es steht noch mehr drin)

50 00 72 00 69 00 76 00 61 00 74 | P.r.i.v.a.t

genau das Privat suche ich.

Jetzt haben die dieses funktion hier gefunden. Ich habe mir das Memo in einen String geholt und dann umgewandelt.

Delphi-Quellcode:

function TForm1.StrToHexString(const s : string):string;
begin
  if s = '' then
    Result := ''
  else
  begin
    SetLength(Result, Length(s)*2);
    BinToHex(PChar(s), PChar(Result), Length(s));
  end;
end;
Leider funktioniert das ganze nicht. Hat so etwas schon mal jemadn gemacht und kann mir hierzu einen Tip geben ? ich möchte also an den Text oder zuminest an die Hexwerte Links an. Lass isch mit den String nur anzeigen kann man nichts erkennen.

Danke Tanja.

mensch72 31. Mär 2019 18:20

AW: Vermutlich Hex Daten Umwandeln
 
es sind keine HEX Daten, es sind normale UniCode Textdaten.

Mit aktuellem Delphi wäre es wohl einfach da...

Mit NonUnicode-Delphi7(wenn dein Profil stimmt) den Memo-Inhalt eventuell in einen WideString passender länge umkopieren... oder eine ander eder unendlich vielen Möglichkeiten suchen/nutzen.

Quick&Dirty könntest du auch nur jedes 2. Zeichen in einen AnsiString einsetzen, denn die zusätzlichen 00 deuten auf simples 16Bit-UniCode mit ohne HiByte-Nutzung hin(das ist aber unsauber und kann schon bei Umlauten oder sonstigen Sonderzeichen scheitern)

Delphi-Quellcode:
function Uni16StrToAnsiStr(const s : string):string;
var i:integer;
begin
    SetLength(Result, Length(s) div 2);
    for(i:=0 to Length(Result)-1 do Result[1+i]:=s[1+(i*2)];
end;

Delphi.Narium 31. Mär 2019 18:50

AW: Vermutlich Hex Daten Umwandeln
 
Eventuell reicht bei Delphi 7 schon sowas:
Delphi-Quellcode:
var
  RichtigerText : String;
begin
  ...
  RichtigerText := Utf8ToAnsi(Tabelle.FieldByName('Memofeld').AsString);
  ..
end;
Utf8ToAnsi gehört zu Unit System, man braucht dafür also nix im Uses.

Zeichen, die UTF8ToAnsi nicht umwandeln kann, werden als ? dargestellt.

juergen 31. Mär 2019 19:48

AW: Vermutlich Hex Daten Umwandeln
 
Hallo,

evtl. reicht das hier?

Delphi-Quellcode:
function HexToString(const value: string): string;
begin
  SetLength(Result, Length(value)-1 div 2);
  if Length(value) > 0 then
    HexToBin(PChar(value), PChar(Result), Length(value));
end;


procedure TForm1.Button1Click(Sender: TObject);
Var
  s: string;
begin
  s := '50 00 72 00 69 00 76 00 61 00 74';
  s := ReplaceStr(s, ' ', '');
  Label2.Caption := HexToString(s);
end;

Redeemer 31. Mär 2019 20:36

AW: Vermutlich Hex Daten Umwandeln
 
Das ist kein UTF-8. Das ist UCS-2LE oder UTF-16LE (kann man am Beispiel nicht erkennen, ist den meisten Usern aber auch egal), das wird gerne falsch als Unicode bezeichnet. Bei Delphi ab Version 2009 geht so etwas:
Delphi-Quellcode:
var
  bs: TByteStream;
  sl: TStringList;
begin
  bs := TByteStream.Create(FieldByName('bla').AsBytes);
  try
    sl := TStringList.Create();
    try
      sl.LoadFoomStream(bs, TEncoding.Unicode);
      // tu was
    finally
      sl.Free();
    end;
  finally
    bs.Free();
  end;
end;

Ydobon 1. Apr 2019 07:57

AW: Vermutlich Hex Daten Umwandeln
 
Für Versionen vor 2009 gibt es die Windowsfunktion "WideCharToMultiByte", die ist seit Windows 2000 dabei.
https://www.delphipraxis.net/1081749-post7.html

p80286 1. Apr 2019 13:30

AW: Vermutlich Hex Daten Umwandeln
 
Zitat:

Zitat von Redeemer (Beitrag 1429190)
das wird gerne falsch als Unicode bezeichnet.

Könntest Du vielleicht den Unterschied zu Unicode erklären?
(war es das LE/BE?)

Gruß
K-H

Gausi 1. Apr 2019 15:23

AW: Vermutlich Hex Daten Umwandeln
 
Unicode beschreibt ja einfach nur das Anliegen, jedem Schriftzeichen eine eindeutige Nummer zuzuordnen. Mit dem Ziel, das Kodierungs-Chaos zu beheben, das z.B. bei Verwendung der ISO 8859 Normen unvermeidbar ist.

Wie diese Nummer (= diese Zahl) dann in einer Datei gespeichert wird (UTF-8, UTF16-LE/BE, UTF-32) ist dann wieder ein wenig was anderes. :-D

freimatz 1. Apr 2019 17:25

AW: Vermutlich Hex Daten Umwandeln
 
Dachte ich zuerst auch, war früher vielleicht auch so. Nach https://de.wikipedia.org/wiki/Unicode gehört die Kodierung aber auch dazu.

Delphi.Narium 1. Apr 2019 17:57

AW: Vermutlich Hex Daten Umwandeln
 
Für die, die es wissenschaftlich sehen: Wikipedia ist keine verwandbarer Literaturhinweis.

Kann man allenfalls als Anlaufpunkt zur weiteren Forschung nehmen.

rfc unicode site:tools.ietf.org


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:17 Uhr.
Seite 1 von 4  1 23     Letzte »    

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