Вы можете сделать это с помощью небезопасного кода - или вы можете использовать BitConverter.GetBytes()
для преобразования значения в байтовый массив, а затем BitConverter.ToSingle()
для обратного преобразования.Очевидно, это менее эффективно, но сработает, если вы не можете использовать небезопасный код.
РЕДАКТИРОВАТЬ: есть еще одна альтернатива, которую я использовал в MiscUtil ,использование C-подобного «union» для работы гораздо больше, чем в исходном примере, но с помощью пользовательской структуры:
[StructLayout(LayoutKind.Explicit)]
struct Int32SingleUnion
{
[FieldOffset(0)]
int i;
[FieldOffset(0)]
float f;
internal Int32SingleUnion(int i)
{
this.f = 0; // Just to keep the compiler happy
this.i = i;
}
internal Int32SingleUnion(float f)
{
this.i = 0; // Just to keep the compiler happy
this.f = f;
}
internal int AsInt32
{
get { return i; }
}
internal float AsSingle
{
get { return f; }
}
}
(Вы можете сделать одно и то же для длинных и двойных, конечно.)