AGB  ·  Datenschutz  ·  Impressum  







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

Regulärer Ausdruck für Hexzahlen

Ein Thema von Ghostwalker · begonnen am 30. Mär 2018 · letzter Beitrag vom 30. Mär 2018
Antwort Antwort
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.690 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Regulärer Ausdruck für Hexzahlen

  Alt 30. Mär 2018, 10:11
Delphi-Quellcode:
function StringtoHex(Data: string): string;
var
  i, i2: Integer;
  s: string;
begin
  i2 := 1;
  for i := 1 to Length(Data) do
  begin
    Inc(i2);
    if i2 = 2 then
    begin
      s := s + ' ';
      i2 := 1;
    end;
    s := s + IntToHex(Ord(Data[i]), 2);
  end;
  Result := s;
end;
Wie der Name sagt, String in einen Hex-String umwandeln.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von GPRSNerd
GPRSNerd

Registriert seit: 30. Dez 2004
Ort: Ruhrpott
239 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Regulärer Ausdruck für Hexzahlen

  Alt 30. Mär 2018, 11:30
Delphi-Quellcode:
function StringtoHex(Data: string): string;
var
  i, i2: Integer;
  s: string;
begin
  i2 := 1;
  for i := 1 to Length(Data) do
  begin
    Inc(i2);
    if i2 = 2 then
    begin
      s := s + ' ';
      i2 := 1;
    end;
    s := s + IntToHex(Ord(Data[i]), 2);
  end;
  Result := s;
end;
Wie der Name sagt, String in einen Hex-String umwandeln.
Liest du eigentlich die Fragen richtig und komplett oder haust du immer einfach nur was raus, wo wenigstens ein Wort übereinstimmt?
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.690 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Regulärer Ausdruck für Hexzahlen

  Alt 30. Mär 2018, 12:06
Ok, erwischt, ich bin mit Tablet draussen beim Eiersuchen, Wetter ist ja fantastisch, da hab ich wohl nicht richtig hingeschaut.
Ich ging davon aus das ein String in ein Hex-Wert verwandelt werden sollte.
Ich schau nachher nochmal rein wenn ich am "grossen" Sitze.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
SProske

Registriert seit: 16. Feb 2015
Ort: Halle/S.
116 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: Regulärer Ausdruck für Hexzahlen

  Alt 30. Mär 2018, 13:08
Werden in einem regulären Ausdruck sogenennate "capturing groups" wiederholt, so wird nur der letzte Treffer gespeichert, bspw.

(.{2})+ auf einen string abcd losgelassen ergibt als Gesamtmatch wieder abcd, die erste Gruppe enthält aber nur cd. Das ist nichts delphi-spezifisches, sondern gilt für alle PCRE Implementierungen (es gibt aber durchaus Regex-Implementierungen, die erlauben alle Instanzen der Gruppe zu prüfen, z.B. in .net)

Für das was du erreichen willst, gibt es quasi zwei Möglichkeiten
- in einem ersten Schritt den kompletten Hex-String extrahieren und dann in einem zweiten Schritt in 2er Paare unterteilen
- die Nutzung von \G um nach einem erfolgten Match an der selben Stelle wieder anzusetzen

z.B. so:

Delphi-Quellcode:
program Hello;

uses
  System.RegularExpressions;

const
  HEX_STR = '$aabbcc';
var
  M: TMatch;
begin
  M := TRegex.Match(HEX_STR, '(?:^\$?|\G(?!^))([[:xdigit:]]{2})');
  while M.Success do
  begin
    WriteLn(M.Groups[1].Value);
    M := M.NextMatch;
  end;
  ReadLn;
end.
Ich verwende hier die vordefinierte Klasse [[:xdigit:]] , die [a-fA-F0-9] entspricht. Dein [a-f,A-F,0-9] matcht btw. auch Kommas.

Wenn du sicher gehen willst, dass du auch wirklich einen Hex-String mit einer geraden Anzahl von Stelle hast, kann an das Ende des Pattern noch ein (?=(?:[[:xdigit:]]{2})+$) .
Sebastian

Geändert von SProske (30. Mär 2018 um 13:13 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.048 Beiträge
 
Delphi 12 Athens
 
#5

AW: Regulärer Ausdruck für Hexzahlen

  Alt 30. Mär 2018, 14:42
Man kann sich die Sache aber auch deutlich einfacher machen:
Delphi-Quellcode:
var
  rec: Int64Rec;
  I: Integer;
begin
  UINT64(rec) := StrToUInt64('$aabbcc');
  for I := 0 to 7 do begin
    Writeln('$' + rec.Bytes[I].ToHexString(2));
  end;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  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 12:53 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