Versuchen Sie, unsicheren Code zu vermeiden, oder möchten Sie nur eine Alternative zu diesen spezifischen Methoden in BinaryReader
und BinaryWriter
?
Sie könnten BitConverter.DoubleToInt64Bits
und BitConverter.Int64BitsToDouble
, die entwickelt wurden, um genau das zu tun, was Sie brauchen, obwohl ich denke, dass sie das gleiche unsichere verwenden Konvertierung hinter die Kulissen als BinaryReader
/ BinaryWriter
Methoden.
Eine andere Möglichkeit besteht darin, eine benutzerdefinierte Struktur mit explizitem Layout zu verwenden, die sowohl eine long
als auch eine double
bei Offset 0 definiert. Dies entspricht einer union
in C.
In etwa so:
%Vor%Dann benutze das:
%Vor%Dies wird unsicheren Code vermeiden und sollte auch ziemlich schnell sein, wenn Sie die Konvertierung auf dem Stack durchführen.
Ich habe das nicht versucht / zusammengestellt, aber ich denke, es sollte funktionieren:)
BEARBEITEN
Ich habe es gerade versucht und es funktioniert. Der Wert von longBytes
oben ist 4608236261112822104.
Einige andere Werte:
%Vor%Hier ist eine Methode, die das tut, was Sie wollen:
%Vor% Sie können byte[] BitConverter.GetBytes(double)
und long BitConverter.ToInt64(byte[],int)
verwenden (indem Sie 0 als Start-Index übergeben), aber intern IIRC diese verwenden unsicheren Code und haben zusätzlich den Overhead eines Arrays. Wähle dein Gift ...
Tags und Links .net floating-point bit-manipulation