AGB  ·  Datenschutz  ·  Impressum  







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

Vermutlich Hex Daten Umwandeln

Ein Thema von Dumpfbacke · begonnen am 31. Mär 2019 · letzter Beitrag vom 8. Apr 2019
Antwort Antwort
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
335 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Vermutlich Hex Daten Umwandeln

  Alt 31. Mär 2019, 17:46
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.
Tanja
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#2

AW: Vermutlich Hex Daten Umwandeln

  Alt 31. Mär 2019, 18:20
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;

Geändert von mensch72 (31. Mär 2019 um 18:32 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#3

AW: Vermutlich Hex Daten Umwandeln

  Alt 31. Mär 2019, 18:50
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.
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.176 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Vermutlich Hex Daten Umwandeln

  Alt 31. Mär 2019, 19:48
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;
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.118 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Vermutlich Hex Daten Umwandeln

  Alt 31. Mär 2019, 20:36
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;
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Ydobon

Registriert seit: 3. Mär 2006
264 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Vermutlich Hex Daten Umwandeln

  Alt 1. Apr 2019, 07:57
Für Versionen vor 2009 gibt es die Windowsfunktion "WideCharToMultiByte", die ist seit Windows 2000 dabei.
https://www.delphipraxis.net/1081749-post7.html
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Vermutlich Hex Daten Umwandeln

  Alt 1. Apr 2019, 13:30
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
335 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Vermutlich Hex Daten Umwandeln

  Alt 1. Apr 2019, 19:15
Hallo Delphianer,
als erstes habe ich mal mein Delphi angepasst. Ich habe etwas neuers als D7. Sorry hate ich gar nicht mehr im Auge.

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;

Das ganze funktioniert leider nicht so. Ich habe bei tu was eingetragehn Hstring := SL[0]. Hier kommen nur die ersten 6 Stellen raus und nicht mehr. Das ganze fängt am mit 050301. Nur das wird angezeigt. Bei IBExpert funktioniert es komplett. Es ist dort noch bedeutend mehr an Daten vorhanden

Hat eventuell noch jemand für micht ein Tip ??
Tanja
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:34 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-2025 by Thomas Breitkreuz