Ближайшим прямым эквивалентом вашего метода C было бы сделать это с небезопасным кодом и указателями:
private static unsafe void SplitToWords(float f, out ushort s1, out ushort s2)
{
unsafe
{
float* ptr = &f;
UInt16* s2ptr = (UInt16*) ptr;
UInt16* s1ptr = s2ptr + 1;
s1 = *s1ptr;
s2 = *s2ptr;
}
}
Это позволяет вам:
public static void Main()
{
float f = -23984.123f;
ushort s1;
ushort s2;
SplitToWords(f, out s1, out s2);
Console.WriteLine("{0} : {1}/{2}", f, s1, s2);
Console.ReadKey();
}
Однако более распространенный управляемый способ - использовать BitConverter .
byte[] fBytes = BitConverter.GetBytes(f);
s1 = BitConverter.ToUInt16(fBytes, 2);
s2 = BitConverter.ToUInt16(fBytes, 0);
Здесь вы можете увидеть то же самое:
public static void Main()
{
float f = -23984.123f;
ushort s1;
ushort s2;
SplitToWords(f, out s1, out s2);
Console.WriteLine("{0} : {1}/{2}", f, s1, s2);
byte[] fBytes = BitConverter.GetBytes(f);
s2 = BitConverter.ToUInt16(fBytes, 0);
s1 = BitConverter.ToUInt16(fBytes, 2);
Console.WriteLine("{0} : {1}/{2}", f, s1, s2);
Console.ReadKey();
}