2014-02-15 8 views
7

In C werde ich dies tun, um Float-Darstellung der Zahl in DWORD zu konvertieren. Nimm den Wert von der Adresse und wirf den Inhalt auf DWORD.Wie float nach float-Darstellung in Uint konvertieren?

dwordVal = *(DWORD*)&floatVal; 

So zum Beispiel 44.54321 wird 0x42322C3F werden.

Wie kann ich dasselbe in C# tun?

+1

Eigentlich '* (DWORD *) & floatVal' ist der falsche Weg, um es in C zu tun, wie es strenge Aliasing Regeln bricht, die C-Compiler verlassen für die Optimierung. Korrekte Wege beinhalten eine Vereinigung (siehe C99tc3, Fußnote 82) oder 'memcpy()'. –

Antwort

12

Sie die BitConverter Klasse verwenden können:

uint value = BitConverter.ToUInt32(BitConverter.GetBytes(44.54321F), 0); 
Console.WriteLine("{0:x}", value); // 42322c3f 

Sie auch direkt dies tun könnte eine unsafe context mit: Allerdings

float floatVal = 44.54321F; 
uint value; 
unsafe { 
    value = *((uint*)(&floatVal)); 
} 
Console.WriteLine("{0:x}", value); // 42322c3f 

, würde ich empfehlen, dies zu vermeiden stark. Siehe Should you use pointers (unsafe code) in C#?

3

die BitConverter Klasse verwenden:

float f = 44.54321f; 
uint u = BitConverter.ToUInt32(BitConverter.GetBytes(f), 0); 
System.Diagnostics.Debug.Assert(u == 0x42322C3F);