Ich entwickle eine portable Klassenbibliothek in C# und ich möchte ein double
Bit zu einem long
konvertieren. Die einfachste Lösung für dieses Problem wäre die Verwendung der BitConverter.DoubleToInt64Bits
-Methode. Diese Methode ist jedoch leider nicht in der Teilbibliothek Portable Library der .NET-Klassenbibliothek verfügbar..NET Portable Bibliothek fehlt BitConverter.DoubleToInt64Bits, Austausch sehr langsam
Als Alternative habe ich mit der folgenden „Two-Pass“ Bitumwandlung kommen:
var result = BitConverter.ToInt64(BitConverter.GetBytes(x), 0);
Meine Tests zeigen, dass dieser Ausdruck konsequent das gleiche Ergebnis wie DoubleToInt64Bits
produziert. Meine Benchmark-Tests zeigen jedoch auch, dass diese alternative Formulierung ungefähr vier mal langsamer als DoubleToInt64Bits
ist, wenn in einer vollständigen .NET Framework-Anwendung implementiert.
Mit nur der Portable Library Subset, ist es möglich, eine Ersetzung von DoubleToInt64Bits
zu implementieren, die schneller als meine obige Formulierung ist?
Toll, was für eine clevere Lösung, vielen Dank Omer! Ihre Lösung ist langsamer als die vollständige DoubleToInt64Bits-Methode, aber mehr als doppelt so schnell wie meine "Two-Pass" -Lösung. Eine Zeitlang war ich ein wenig besorgt, dass dies in einer portablen Bibliothek nicht funktionieren würde, da MSDN keine Hinweise darauf gibt, dass die Untergruppe Portable Library das [FieldOffset-Attribut] unterstützt (http://msdn.microsoft.com/de-de). us/library/system.runtime.interopservices.fieldoffsetattribute.aspx). Die Implementierung funktioniert jedoch so, dass es nur ein Versehen in der MSDN-Dokumentation zu sein scheint. –
Ein zusätzlicher Vorteil Ihrer Lösung ist, dass ich einfach ein 'ulong ULong'-Feld zu der 'Union'-Struktur hinzufügen und analog eine' DoubleToUInt64Bits'-Methode implementieren kann, die einen 'ulong'-Wert zurückgibt. Diese Flexibilität wird sehr geschätzt :-) –
Froh ich könnte helfen :-) –