Один из вариантов - использовать BitConverter
:
// assuming 'bytes' is byte[4]
float value = BitConverter.ToSingle(bytes);
// or = BitConverter.ToSingle(BitConverter.GetBytes(integer));
Еще одна вещь, которую вы могли бы сделать, если бы знали, какого типа будет значение, прежде чем вызывать этот метод, это использовать перегрузку операторов на стороне P / Invoke:
// [DllImport("x.dll")]
// public static extern void YourCall(ref float value);
// [DllImport("x.dll")]
// public static extern void YourCall(ref int value);
if (someCondition)
{
float value = 0.0f;
NativeMethods.YourCall(ref value);
this.frob(value);
}
else
{
int value = 0;
NativeMethods.YourCall(ref value);
this.frob(value);
}