AGB  ·  Datenschutz  ·  Impressum  







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

ANSI-Hex-String ---> Ansi-String

Ein Thema von Kedariodakon · begonnen am 21. Jan 2005 · letzter Beitrag vom 21. Jan 2005
Antwort Antwort
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#1

ANSI-Hex-String ---> Ansi-String

  Alt 21. Jan 2005, 09:25
Es geibt einen String z.b. '4450' und rauskommen soll 'DP'

Meine Routine geht, aber das muß doch auch noch viel einfacher gehen oder?


Delphi-Quellcode:
Const HexDig: Array[ 0..15 ] Of Char = ( '0', '1', '2', '3', '4', '5', '6', '7',
                                         '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' );

Function HexStringToString( Const Input: String ): String;
Var s: String;
      i, j: Integer;
      va, vu: Integer;
      c: Char;
Begin
   va := 0;
   vu := 0;
   Result := '';
   s := UpperCase( Input );
   For i := 1 To Length( s ) Do Begin
      c := s[ i ];
      For j := 0 To 15 Do If HexDig[j] = c Then vu := j;
      If Not( ( i mod 2 ) = 0 ) Then Begin
         va := ( vu Shl 4 );
      End Else Begin
         va := va + ( vu );
         Result := Result + Chr( va );
      End;
   End;
End;
Bye
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: ANSI-Hex-String ---> Ansi-String

  Alt 21. Jan 2005, 10:03
Ok noch ne Möglichkeit:

Delphi-Quellcode:
Const cHexDig: Set Of Char = [ 'A', 'a', 'B', 'b', 'C', 'c',
                                              'D', 'd', 'E', 'e', 'F', 'f',
                                              '0', '1', '2', '3', '4', '5',
                                              '6', '7', '8', '9' ];

Function CheckHexChar( Input: Char ): Char;
Begin
   Result   := Input;
   If Not( Input In cHexDig ) Then Raise Exception.Create( 'Char is not a HexChar' );
End;


Function HexStringToString( Const Input: String ): String;
Var i, Start: Integer;
Begin
   Try
      If Not( Length( Input ) Mod 2 = 0 ) Then Begin
         Start := 2;
         Result := Chr( StrToInt( '$' + CheckHexChar( Input[ 1 ] ) ) );
      End Else Begin
         Start := 1;
         Result := '';
      End;
      For   i := Start To ( Length( Input ) ) Do Begin
         If ( ( Start = 1 ) And ( Not( i Mod 2 = 0 ) ) ) Then Begin
            Result   := Result+ Chr( StrToInt( '$' + CheckHexChar( Input[ i ] ) +
                                                                        CheckHexChar( Input[ i + 1 ] ) ) );
         End Else If ( ( Start = 2 ) And ( i Mod 2 = 0 ) ) Then Begin
            Result   := Result+ Chr( StrToInt( '$' + CheckHexChar( Input[ i ] ) +
                                                                        CheckHexChar( Input[ i + 1 ] ) ) );
         End;
      End;
   Except
      On Error: Exception Do Begin
         Error.Message := 'HexStringToString - Error:'#13#10 + Error.Message;
         Raise;
      End;
   End;
End;
Gibts noch was besseres?

Bye
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#3

Re: ANSI-Hex-String ---> Ansi-String

  Alt 21. Jan 2005, 10:55
Hallo,

Das hier würde ich als besser bezeichnen:
Delphi-Quellcode:
function HexStrToStr ( s:string ) : string;
var k,len : integer;
    hexw : array[0..10] of char;
    binw : array[0..10] of char;
begin
  len := length ( s ) div 2;
  setlength(Result, len);
  for k := 1 to len do begin
    hexw[0] := s[k*2-1];
    hexw[1] := s[k*2];
    hexw[3] := #0;
    HexToBin ( hexw, binw, 10 );
    Result[k] := char(binw[0]);
  end;
end;
grüße, daniel

[EDIT]Schöner formatiert[/EDIT]
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: ANSI-Hex-String ---> Ansi-String

  Alt 21. Jan 2005, 11:28
So geht es auch, aber dahintergestiegen bin ich noch nicht

Bye
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#5

Re: ANSI-Hex-String ---> Ansi-String

  Alt 21. Jan 2005, 11:47
Na dann versuch ichs mal mit Erklärung

Delphi-Quellcode:
function HexStrToStr ( s:string ) : string;
var k,len : integer;
    hexw : array[0..10] of char;
    binw : array[0..10] of char;
begin
  len := length ( s ) div 2; //Der Ergebnisstring ist halb so lang, wie s. Ist wohl klar
  setlength(Result, len);
  for k := 1 to len do begin
    //immer 2 Char aus s holen
    hexw[0] := s[k*2-1];
    hexw[1] := s[k*2];
    //Mit binärer 0 abschließen
    hexw[3] := #0;
    //Text in Binärwert umwandeln z.B. aus 'FF' wird jetzt #FF
    HexToBin ( hexw, binw, 10 );
    //Binärwert als Charakter casten und in Ergebnisstring schreiben.
    Result[k] := char(binw[0]);
  end;
end;
Ich hoffe, dass ist jetzt deutlicher
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: ANSI-Hex-String ---> Ansi-String

  Alt 21. Jan 2005, 11:51
Was hällts du davon?


Delphi-Quellcode:
Function HexStrToStr( Input: String ): String;
Var      i: Integer;
      Ch: Char;
      HexW: Array[ 0..1 ] Of Char;
Begin
   Result := '';
   For i := 1 To ( Length( Input ) Div 2 ) Do Begin
      HexW[ 0 ] := Input[ i * 2 - 1 ];
      HexW[ 1 ] := Input[ i * 2 ];
      HexToBin ( Hexw, @Ch, 2 );
      Result := Result + Ch;
   End;
End;

bye


Edit: Besser?
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#7

Re: ANSI-Hex-String ---> Ansi-String

  Alt 21. Jan 2005, 12:28
Teilweise. Du solltest die Länge von Result schon im vorhinein setzen und dann per Idx auf die Zeichen zugreifen. Sonst erzeugst du bei jedem Schleifendurchlauf einen neuen String im Speicher.
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: ANSI-Hex-String ---> Ansi-String

  Alt 21. Jan 2005, 12:31
hmm wird das Zeichen nicht nur rangehangen?


Bye
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#9

Re: ANSI-Hex-String ---> Ansi-String

  Alt 21. Jan 2005, 12:39
Nein, es wird immer ein neuer erzeugt.
Das ist so ähnlich wie bei dynamischen Arrays. Wenn du in einer Schleife immer setlength(Array, AlteLänge + 1) sagst, wird immer ein neuer, größerer Speicherblock angefordert und die alten Daten dort rein kopiert.

Wenn möglich sollte bei solchen Sachen die Größe schon vorher angegeben werden.
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: ANSI-Hex-String ---> Ansi-String

  Alt 21. Jan 2005, 12:45
Thx for info

Bye
Christian
  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:16 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