C# int到浮点指针 在C++中,有一个浮点值被放入int: int value = *(int *)(&myFloatValue);
这个值被传递给我正在用C#编写的程序。在运行时不知道该值是int类型还是float类型。我必须考虑两种选择。显然,如果它是int,我已经有了它。但是,如果它是一个浮点值,我需要更改它(而不是强制转换)它的浮点值。我该怎么做?我尝试在C#中使用指针,但没有成功。C# int到浮点指针 在C++中,有一个浮点值被放入int: int value = *(int *)(&myFloatValue);,c#,.net,pointers,unsafe,C#,.net,Pointers,Unsafe,这个值被传递给我正在用C#编写的程序。在运行时不知道该值是int类型还是float类型。我必须考虑两种选择。显然,如果它是int,我已经有了它。但是,如果它是一个浮点值,我需要更改它(而不是强制转换)它的浮点值。我该怎么做?我尝试在C#中使用指针,但没有成功。BitConverter.GetBytes和BitConverter.ToFloat()。如果我理解你的要求,我建议使用联合 [StructLayout(LayoutKind.Explicit)] struct IntOrFloat {
BitConverter.GetBytes
和BitConverter.ToFloat()。
如果我理解你的要求,我建议使用联合
[StructLayout(LayoutKind.Explicit)]
struct IntOrFloat
{
[FieldOffset(0)]
public int asInt32;
[FieldOffset(0)]
public float asFloat;
}
我认为这会起作用。一个选择是使用:
如果在调用该方法之前知道值的类型,那么可以做的另一件事是在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);
}
在C#代码中执行相反的操作:
这应该行得通
(只需确保该值不在托管类型内,它必须独立存在)
编辑:确保将正在执行此操作的代码体声明为“不安全”您可以使用
位转换器,但它确实有点难看。你的C++到C接口非常混乱——传递一个值,它可以是同一个参数中的int或浮动。我建议您执行以下两种操作之一:
传递一个int和一个float,并决定C中哪个是正确的#
只传递一个数字,该类型可以容纳所有浮点数和所有整数-double
哦,是的,我也喜欢+11) 你怎么能在运行时不知道类型呢?2) 你说的“改变”是指重新诠释演员阵容?我真的不明白?如何传递值?通过方法调用?这种方法有原型吗?
// [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);
}
float myFloatValue = *(float *)(&value);