AGB  ·  Datenschutz  ·  Impressum  







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

TMemoryStream mit Zufallszahlen füllen

Ein Thema von DevidEspenschied · begonnen am 11. Jan 2016 · letzter Beitrag vom 12. Jan 2016
Antwort Antwort
DevidEspenschied

Registriert seit: 7. Sep 2006
Ort: Berlin
444 Beiträge
 
Delphi 12 Athens
 
#1

TMemoryStream mit Zufallszahlen füllen

  Alt 11. Jan 2016, 17:11
Hallo,

ich habe einen TMemoryStream, den ich von einer bestimmten Stelle einlese und mit Zufallszahlen befüllen möchte. Hat jemand einen Tipp, wie ich das am schnellsten bewerkstelligen kann?

Vielen Dank.
Devid
Devid Espenschied
Pre-sales Consultant
Embarcadero Germany GmbH
germany.info@embarcadero.com

Kein Support per PN
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: TMemoryStream mit Zufallszahlen füllen

  Alt 11. Jan 2016, 17:14
Ja.
Code:
Wiederhole
  Erzeuge Zufallszahl
  Zufallszahl in Stream schreiben
Bis genug
Was konkret macht dir dabei Probleme?
  1. Erzeugen einer Zufallszahl => Delphi-Referenz durchsuchenRandom
  2. Schreiben einer Zahl in einen Stream => Delphi-Referenz durchsuchenTStream
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (11. Jan 2016 um 17:16 Uhr)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: TMemoryStream mit Zufallszahlen füllen

  Alt 11. Jan 2016, 17:18
Hallo, ich habe einen TMemoryStream, den ich von einer bestimmten Stelle einlese und mit Zufallszahlen befüllen möchte. Hat jemand einen Tipp, wie ich das am schnellsten bewerkstelligen kann?
Das sind recht dürftige Angaben, die du hier zur Verfügung stellst. Ein TMemoryStream ist ja nicht typisiert, deshalb könnte ich jetzt nicht entscheiden, ob du Float- oder Integerwerte oder die Zahlen in Stringform dort im Stream haben willst. Letztlich kommt es darauf an, was du mit diesem Stream machen willst bzw. wie diese etwas ominöse Anforderung "TMemoryStream mit Zufallszahlen füllen" überhaupt zustande kommt.
  1. Was hast du denn bereits veruscht?
  2. Was ist dabei herausgekommen?
  3. Wie lauten die Fehlermeldungen?

Geändert von Perlsau (11. Jan 2016 um 17:20 Uhr)
  Mit Zitat antworten Zitat
DevidEspenschied

Registriert seit: 7. Sep 2006
Ort: Berlin
444 Beiträge
 
Delphi 12 Athens
 
#4

AW: TMemoryStream mit Zufallszahlen füllen

  Alt 11. Jan 2016, 17:41
Ich lese eine Datei in einen Memory Stream ein, möchte den Inhalt gerne mit Zufallszahlen beschreiben, und das wieder in die Datei zurück schreiben.

Dabei wird die MemoryStream Größe automatisch der Dateigröße mit SetSize angepasst.

Im Prinzip benötige ich eine Schleife, in der ich abhängig von der Streamgröße Zufallszahlen generiere. Bisher habe ich folgendes:

Delphi-Quellcode:
var i : Integer;
    Beispielstream : TMemoryStream;
...
begin
  Beispielstream:=TMemoryStream.Create;
  Beispielstream.SetSize(DateiGroesseInBytes);
  Beispielstream.LoadFromFile(Datei);

  Randomize;
  for i:=0 to Beispielstream.Size do Beispielstream.Write(Random(256), 1);

  Beispielstream.SaveToFile(Datei);
  Beispielstream.Free;
end;
Devid
Devid Espenschied
Pre-sales Consultant
Embarcadero Germany GmbH
germany.info@embarcadero.com

Kein Support per PN
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: TMemoryStream mit Zufallszahlen füllen

  Alt 11. Jan 2016, 17:56
Wie wäre es so:
Delphi-Quellcode:
var i : Integer;
    Beispielstream : TMemoryStream;
...
begin
  Beispielstream:=TMemoryStream.Create;
  Beispielstream.SetSize(DateiGroesseInBytes);

  Randomize;
  for i:=0 to Beispielstream.Size-1 do Beispielstream.Write(Random(256), 1);

  Beispielstream.SaveToFile(Datei);
  Beispielstream.Free;
end;
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: TMemoryStream mit Zufallszahlen füllen

  Alt 11. Jan 2016, 18:01
Das erzeugt natürlich einen Stream in Quattro-Größe

Nehmen wir an, wir setzen Size auf 100 und schreiben jetzt also 100 Integer-Werte (=4 Byte) ...
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
DevidEspenschied

Registriert seit: 7. Sep 2006
Ort: Berlin
444 Beiträge
 
Delphi 12 Athens
 
#7

AW: TMemoryStream mit Zufallszahlen füllen

  Alt 11. Jan 2016, 19:15
Genau genommen ist die Streamgröße durch 4 teilbar und es müssen vorzeichenlose Integerwerte, also DWords sein.
Devid
Devid Espenschied
Pre-sales Consultant
Embarcadero Germany GmbH
germany.info@embarcadero.com

Kein Support per PN
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.153 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: TMemoryStream mit Zufallszahlen füllen

  Alt 11. Jan 2016, 22:04
Delphi-Quellcode:
var i : Integer;
    Beispielstream : TMemoryStream;
...
begin
  Beispielstream:=TMemoryStream.Create;
  Beispielstream.SetSize(DateiGroesseInBytes);
  Beispielstream.LoadFromFile(Datei);

  Randomize;
  for i:=0 to Beispielstream.Size do Beispielstream.Write(Random(256), 1);

  Beispielstream.SaveToFile(Datei);
  Beispielstream.Free;
end;
hmm

Delphi-Quellcode:
var i : Integer;
    Beispielstream : TMemoryStream;
...
begin
  Beispielstream:=TMemoryStream.Create;
  Beispielstream.SetSize(DateiGroesseInBytes); // Wofür?
  Beispielstream.LoadFromFile(Datei); // Daraus ergibt sich die Größe des Memstreams...


  Randomize;
  for i:=0 to Beispielstream.Size do Beispielstream.Write(Random(256), 1); // Warum erst die Datei laden um die Daten dann zu überschreiben...

  Beispielstream.SaveToFile(Datei);
  Beispielstream.Free;
end;
Wenn Du nur Bytes schreiben willst... Dann schreib auch nur Bytes...
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: TMemoryStream mit Zufallszahlen füllen

  Alt 11. Jan 2016, 22:16
Ich schätze er will einen Datei-Shredder bauen....
Du brauchst diese durch-4-Teilerei nicht.

Delphi-Quellcode:
var i : Integer;
    Beispielstream : TMemoryStream;
begin
  Beispielstream:=TMemoryStream.Create;
  try
    Beispielstream.LoadFromFile(Datei);

    //Randomize; Sollte nur einmal im Programm aufgerufen werden!
    for i:=0 to Beispielstream.Size-1 do
      PByte(NativeUInt(Beispielstream.Memory)+i)^ := random(256);

    Beispielstream.SaveToFile(Datei);
  finally
    Beispielstream.Free;
  end;
end;
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.153 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: TMemoryStream mit Zufallszahlen füllen

  Alt 11. Jan 2016, 22:24
Na dann eher so...

Delphi-Quellcode:
var i : byte;
    Beispielstream : TMemoryStream;
begin
  Beispielstream:=TMemoryStream.Create;
  try
    Beispielstream.LoadFromFile(Datei);

    //Randomize; Sollte nur einmal im Programm aufgerufen werden!

    for i:=0 to 255 do
      begin
        Fillchar(Beispielstream.Memory^,I,Beispielstream.Size);
        Beispielstream.SaveToFile(Datei);
      end;
        
  finally
    Beispielstream.Free;
  end;
end;
  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 07:20 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 by Thomas Breitkreuz