AGB  ·  Datenschutz  ·  Impressum  







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

String umwandeln

Ein Thema von ferby · begonnen am 4. Mär 2005 · letzter Beitrag vom 7. Mär 2005
Antwort Antwort
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#1

String umwandeln

  Alt 4. Mär 2005, 07:34
Hallo,


Ich habe einen Ansistring der nur aus zufälligen ASCII Zeichen besteht.
Ich will jetzt das diese Zeichen umgewandelt werden und die Umgewandelten Zahlen sollen in einen anderern String gespeichert werden.
So soll umgewandelt werden.

#1 --> 0000
#2 --> 0001
#3 --> 0002
#4 --> 0003
#5 --> 0010
#6 --> 0011
#7 --> 0012
#8 --> 0013
#9 --> 0020
usw.

Fällt euch da etwas ein wie mann das einfach lösen kann?
zB: Im Ansistring1 steht #1#10#5 dann soll es umgewandelt werden damit im Ansistring2 steht: 000000210010


wäre für hilfe dankbar...
  Mit Zitat antworten Zitat
Stefan Dieler
(Gast)

n/a Beiträge
 
#2

Re: String umwandeln

  Alt 4. Mär 2005, 07:45
Hallo,

für mich gibt es keine richtige Logik beim Umwandeln, oder habe ich da was übersehen?
So würde ich den einfacheren Weg gehen und einfach eine Funktion erstellen, in die du z.B. #5 als Parameter mitgibst und dann einen String ('0010') als Rückgabeparameter bekommst. Innerhalb der Funktion würde ich mit vielen if's bzw. case arbeiten.

Und anschließend kannst du ja die Strings zusammenketten.
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#3

Re: String umwandeln

  Alt 4. Mär 2005, 07:46
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  S1, S2: String;
  I: Integer;
begin

  S1 := #1#10#5;
  S2 := '';

  for I := 1 to Length(S1) do
    case S1[I] of
      #1 : S2 := S2 + '0000';
      #2 : S2 := S2 + '0001';
      #3 : S2 := S2 + '0002';
      #4 : S2 := S2 + '0003';
      #5 : S2 := S2 + '0010';
      #6 : S2 := S2 + '0011';
      #7 : S2 := S2 + '0012';
      #8 : S2 := S2 + '0013';
      #9 : S2 := S2 + '0020';
      #10: S2 := S2 + '0021';
    end;

  ShowMessage(S2);

end;
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#4

Re: String umwandeln

  Alt 4. Mär 2005, 08:23
Das sieht doch stark nach einer Umrechnung zur Basis 4 aus. Such doch einfach mal nach einer Funktion um eine Zahl in einen Binärstring umzuwandeln. Diese sollte man dann relativ leicht an die Basis 4 anpassen können.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: String umwandeln

  Alt 4. Mär 2005, 10:25
Einfach jedes Zeichen in einen Integer umwandeln (Ord), dann die Bits aufteilen (shr und "and 3") und dann den erhaltenen Wert wieder in eine Zahl umwandeln (IntToStr).

Was die einzelnen Befehle machen, findest du in der OH

Delphi-Quellcode:
S := 'abc...';

S2 := '';
For i := 1 to Length(S) do
  S2 := S2 + IntToStr((Ord(S[i]) shr 6) and 3) +
    IntToStr((Ord(S[i]) shr 4) and 3) +
    IntToStr((Ord(S[i]) shr 2) and 3) +
    IntToStr(Ord(S[i]) and 3);
S ist dein zufälliger String
und S2 der mit den Zahlen ^^
$2B or not $2B
  Mit Zitat antworten Zitat
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#6

Re: String umwandeln

  Alt 4. Mär 2005, 14:52
hallo,

danke, das klappt so wie ichs mir vorgestellt habe....

leider blicke ich nur da teilweiße bei der programmierung durch.

wie würde es funktionieren wenn ich genau umgekehrt umwandel möchte? aus s2 wieder s1 bekommen??


ferby
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

Re: String umwandeln

  Alt 7. Mär 2005, 18:08
Delphi-Quellcode:
For i := 1 to Length(S) do
  S2 := S2 + IntToStr((Ord(S[i]) shr 6) and 3) +
    IntToStr((Ord(S[i]) shr 4) and 3) +
    IntToStr((Ord(S[i]) shr 2) and 3) +
    IntToStr(Ord(S[i]) and 3);
Man kann diesen Code auch anders darstellen, dieses ist halt nur die schnelle Variante

Delphi-Quellcode:
For i := 1 to Length(S) do
  S2 := S2 +
    IntToStr((Ord(S[i]) div 64) mod 4) +
    IntToStr((Ord(S[i]) div 16) mod 4) +
    IntToStr((Ord(S[i]) div 4) mod 4) +
    IntToStr(Ord(S[i]) mod 4);

IntToStr((Ord(S[i]) shr 4) and 3):
Ord(S[i]) - wandelt das Zeichen in einn Integer um
X shr 4 - verschiebt die Bits nach rechts (Shift Right) - 10xx0100 > 000010xx
X and 3 - entfernt sonstige Bits - 000010xx > 000000xx
IntToStr(X) - wandelt es wieder in eine Zahl um




Delphi-Quellcode:
S := '0121212102120...';

S2 := '';
For i := 1 to Length(S) div 4 do
  S2 := S2 + Chr(
    StrToInt(S[i * 4] shl 6) +
    StrToInt(S[i * 4 + 1] shl 4) +
    StrToInt(S[i * 4 + 2] shl 2) +
    StrToInt(S[i * 4 + 3]);
Einfach die Zahlen nehmen,
S[i * 4]
wieder in einen Interger zurückverwandeln,
StrToInt(X)
die Bits wieder an die richtige Stelle schieben
X shl 4
und dann nur noch zurück ins Zeichen.
Chr(X)
$2B or not $2B
  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 20:48 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