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
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: TMemoryStream mit Zufallszahlen füllen

  Alt 11. Jan 2016, 17: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
 
#2

AW: TMemoryStream mit Zufallszahlen füllen

  Alt 11. Jan 2016, 18: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
sahimba

Registriert seit: 14. Nov 2011
Ort: Berlin, Hauptstadt der DDR
137 Beiträge
 
Delphi 10 Seattle Professional
 
#3

AW: TMemoryStream mit Zufallszahlen füllen

  Alt 11. Jan 2016, 18:20
...und es müssen vorzeichenlose Integerwerte, also DWords sein.
Ob das vorzeichenlose DWords, Integer oder Rumpelpumpels sind macht doch keinen Unterschied, so lange es 4 Byte sind. WAS diese 4 Byte darstellen ist am Ende reine "Interpretationssache".
  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
 
#4

AW: TMemoryStream mit Zufallszahlen füllen

  Alt 11. Jan 2016, 18:24
Genau genommen ist die Streamgröße durch 4 teilbar und es müssen vorzeichenlose Integerwerte, also DWords sein.
Wenn da eine zufällige Folge von 4 Byte Blöcken rein soll, wen interessiert dann ob da was vorzeichenlos ist oder nicht?

Lies diese 4 Bytes nachher in ein DWORD und du hast ein DWORD .
Lies diese 4 Bytes nachher in ein Integer und du hast ein Integer .
Lies diese 4 Bytes nachher in ein Double und du hast ein Double .
...


@sahimba Ich mach hier mal das Echo
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
 
#5

AW: TMemoryStream mit Zufallszahlen füllen

  Alt 11. Jan 2016, 18:31
Okay also dann muss ich ja durch 4 teilen bei der For-Schleife, und Ramdom entsprechend nach oben anpassen (ich glaube Integer ist vordefiniert mit einem Maximalwert von 2147483647:

for i:=0 to (Beispielstream.Size-1 DIV 4) do Beispielstream.Write(Random(2147483647), 4);
Devid
Devid Espenschied
Pre-Sales Consultant
Embarcadero Germany GmbH
germany.info@embarcadero.com

Kein Support per PN
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
989 Beiträge
 
Delphi 6 Professional
 
#6

AW: TMemoryStream mit Zufallszahlen füllen

  Alt 12. Jan 2016, 08:01
Okay also dann muss ich ja durch 4 teilen bei der For-Schleife, und Ramdom entsprechend nach oben anpassen (ich glaube Integer ist vordefiniert mit einem Maximalwert von 2147483647:

for i:=0 to (Beispielstream.Size-1 DIV 4) do Beispielstream.Write(Random(2147483647), 4);
Nicht unbedingt

Da 4 Bytes = 1 DWORD, ist es egal, ob Du nun 4 zufällige Bytes oder 1 zufalliges DWORD erzeugst..

Nur bei dem vorhandenen RANDOM von Delphi, ist sogar die Lösung per 4x Byte zufälliger, wie einmal DWORD..
Ist halt kein 'richtiger' Zufallsgenerator, da Coputer sich damit schwer tun..
  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
 
#7

AW: TMemoryStream mit Zufallszahlen füllen

  Alt 11. Jan 2016, 18:33
Nur mal so OT am Rande:

Schon mal darüber nachgedacht, dass man mit so einer zufälligen Bytefolge auch zufällig einen Virus produziert, der vom Virenscanner dann gefressen wird?

Oder es ist ein ganz neuer noch unbekannter Virus der dann das ganze Internet lahmlegt?
Oder es wird ein Bild, was den wahren Mörder von JFK zeigt? (Vielleicht sogar irgendein Alien?)
...

Also nicht wundern was dabei herauskommen kann
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
nahpets
(Gast)

n/a Beiträge
 
#8

AW: TMemoryStream mit Zufallszahlen füllen

  Alt 11. Jan 2016, 18:48
for i:=0 to (Beispielstream.Size-1 DIV 4) do Beispielstream.Write(Random(2147483647), 4);

Punkt vor Strichrechnung beachten!
for i:=0 to ((Beispielstream.Size-1) DIV 4) do Beispielstream.Write(Random(2147483647), 4);


Wie wäre es denn damit?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i : Integer;
    Beispielstream : TMemoryStream;
    DateiGroesseInBytes : Integer;
    dw : DWord;
begin
  DateiGroesseInBytes := 100;
  Beispielstream:=TMemoryStream.Create;
  Beispielstream.SetSize(DateiGroesseInBytes);
  Randomize;
  for i := 0 to (Beispielstream.Size - 1) Div SizeOf(dw) do begin
    dw := Random(MaxInt);
    Beispielstream.Write(dw, SizeOf(dw));
  end;
  Beispielstream.SaveToFile('Datei');
  Beispielstream.Free;
end;
  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
 
#9

AW: TMemoryStream mit Zufallszahlen füllen

  Alt 11. Jan 2016, 18:56
So gibt es einen Zufallswert, der den gesamten Integer-Bereich abdeckt:
Delphi-Quellcode:
function GetTotalRandomInteger() : Integer;
begin
  Result := 0;
  for i := 1 to 4 do
    Result := ( ( Result shl 8 ) and $FFFFFF00 ) or Random( 256 );
end;
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 18:58 Uhr)
  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 22:07 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