TMemoryStream... einzelne Bytes
-
Hi,
Wie kann ich jedem Byte in einem MemoryStream einen Wert dazu addieren?
Das ganze soll einen String verschlüsseln...
DiV
Rudi
-
Indem du per TMemoryStream::Write den neuen Wert an die gewünschte Position schreibst.
-
Danke Jansen für die schnelle Hilfe!
Ein kleines Beispiel würde mir die Sache jedoch erleichtern (bin noch Anfänger).
Die Daten wurden vorher mit LoadFromFile eingelesen, müssen die erst in einen zweiten Buffer überführt werden?
div
rudi
-
Nachtrag:
Geht das ganze auch mit einer StringList?
(Bitte mit Beispiel)
DiV
Rudi
-
Also vielleicht ist mein Problem noch nicht so deutlich geworden...;)
Ich möchte Srings in einer Datei speichern, ohne das diese sofort lesbar sind.
Zu diesem Zweck möchte ich jeden einzelnen Buchstaben manipulieren, indem ich einfach einem Wert dem entsprechenden Byte dazuaddiere.Am leibsten wäre es mir,wenn ich direkt auf die Bytes meiner StringList zugreifen könnte (von Position 1->Ende).
DiV
Rudi
-
TStringList::Strings[]::operator[]
Das müsste dir weiterhelfen.
<edit>Hab das mal korrigiert: Namespaces werden durch ein "::" getrennt (-;</edit>
[ Dieser Beitrag wurde am 12.01.2003 um 14:37 Uhr von junix editiert. ]
-
@Eßer Danke
Hab mir auch was ausgedacht:
String Test; for(int i=0;i< Record->Count;i++) { Test = Record->Strings[i]; for (int i=0; i<Text.Length();i++) { Test[i]=Test[i]+7; } } Record->SaveToFile("Recorde.txt"); }
Rudi
-
@junix: Ups, zu schnell gedacht, hast natürlich recht. Danke fürs Verbessern. Ich seh da nur keinen namespace...
@Rudi: Gut gemacht. Wenn du jetzt deinen Code zur besseren Lesbarkeit noch einrückst isses perfekt.
Edit: Du musst dich schon für eins entscheiden: Rekorde oder Records. Recorde ist jedenfalls falsch.
[ Dieser Beitrag wurde am 12.01.2003 um 14:49 Uhr von Eßer editiert. ]
-
Original erstellt von Eßer:
Ich seh da nur keinen namespace...Jede Klasse entspricht ebenfalls einen Namespace, Eßer (-;
-junix
-
Sogut ist mein Code wohl doch nicht...
In der Datei kommt nichts an!!
PS.:
Das liegt jedenfalls nicht am Dateinamen!!Rudi
-
Vielleicht hilft es ja, wenn du den geänderten String auch wieder zurück an die StringList übergibst!?
-
Original erstellt von junix:
Jede Klasse entspricht ebenfalls einen Namespace, Eßer (-;Sicher? Klar, eine Klasse wird teilweise, z. B. bei static-Membern, wie ein namespace behandelt, aber ob sie deshalb auch einer ist?
Edit: Versuch mal ein
using namespace AnsiString;
und du siehst, eine Klasse ist kein namespace.
[ Dieser Beitrag wurde am 12.01.2003 um 16:06 Uhr von Eßer editiert. ]
-
Es gibt eine riesen Rechnerei und am Ende eine Zugriffsverletzung:
String Test; for(int j=0;j< Record->Count;j++) { Test = Record->Strings[j]; for (int i=0; i<Text.Length();i++) { Test[i]=Test[i]+7; } Record->Strings[j] = Test; } Record->SaveToFile("Records.txt");
PS.: Man beachte den Dateinamen!
DiV
Rudi
-
Guck noch mal in die Hilfe zu AnsiString:: (@junix: ;)) operator[].
[ Dieser Beitrag wurde am 12.01.2003 um 16:26 Uhr von Eßer editiert. ]
-
@Eßner Ich werd' aus der tollen Hilfe nicht so schlau...
Hab auch schon "Test[i] = Test[i]^255" versucht...
Vielleicht kannst du ja noch ein wenig konkreter werden, wo der Fehler liegt.danke
Rudi
-
Frag dich mal, was Test[0] ist.
-
Das hat schon mal geholfen!
Allerdings läuft die Routine nur bis zum ersten Leerzeichen....
Gibt Length() nur die Länge bis zum ersten Leerzeichen an?DiV
Rudi
-
@junix: Was ist jetzt? Hab ich gewonnen?
-
Warum läuft die Schleife bis Text.Length() statt nach Test.Length()?
Soll das so sein?Happy debugging!
-
Haha.