![]() |
String umwandeln
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... |
Re: String umwandeln
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. |
Re: String umwandeln
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; |
Re: String umwandeln
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.
|
Re: String umwandeln
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 ist dein zufälliger String
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); und S2 der mit den Zahlen ^^ |
Re: String umwandeln
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 |
Re: String umwandeln
Delphi-Quellcode:
Man kann diesen Code auch anders darstellen, dieses ist halt nur die schnelle Variante
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);
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:
Einfach die Zahlen nehmen,
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]); 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) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:45 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