Ich versuche, eine ganze Zahl von Daten aus/dev/random zu ziehen. Der folgende Code funktioniert. Ich versuche zu verstehen, warum ich den size_t-Typ für die endgültige Ausgabe verwenden muss, um Genauigkeitsverluste zu vermeiden. Siehe die Kommentare im Code.Verlust der Genauigkeit von 4 Byte Char-Array zu int?
Ich dachte, dass das Problem vielleicht war, dass die .read-Methode eine Art von Padding wie ein Null-Beendigungszeichen hinzufügte. Ich habe versucht, die Länge auf 3 zu setzen, um das zu vermeiden, aber es schien keine Rolle zu spielen. Ich bin froh, dass ich herausgefunden habe, wie ich das lösen kann, aber ich würde gerne verstehen, warum ich musste.
size_t getSeed()
{
std::ifstream rnd ("/dev/random", std::ios::binary);
if(rnd.is_open())
{
int len = sizeof(int); // 4 bytes
char* blk = new char [len];
rnd.read (blk, len); // 8 bytes?
rnd.close();
size_t out = (size_t)*blk; // loss of precision with int
delete[] blk;
return out;
}
else
{
return 0;
}
}
@ mreff555 Was hast du gerade getan? – LogicStuff
LogicStuff, was meinst du? Paul R., was wäre der richtige Weg, um diese Konvertierung zu machen? – mreff555
Auch wenn es richtig war (du machst nur das erste "char"), warum würdest du es bearbeiten? – LogicStuff