将UInt64转换为float

时间:2016-03-05 21:11:34

标签: c# casting floating-point uint64

如何将此UInt64转换为float

UInt64 MyLongInt = 14250221004866263104;
float My4ByteFloat = MyLongInt;
Console.WriteLine(My4ByteFloat);

这与我正在执行的内存读取有关。我正在检索的值是UInt64,对应于14250221004866263104。我需要将其转换为float,因为我知道我的地址是float。现在,当我使用Cheat Engine时,它会正确转换它并给我这个结果:-7088。 当我使用C#时,它会给我1425002E+19

现在我知道将8个字节转换为4个字节并不是最好的事情,并且在此过程中可能会出现一些问题但是,由于Cheat Engine正在执行它并且它获得了正确的结果,因此它必须是可能的

所以任何人都知道如何将此UInt64转换为float

编辑: enter image description here

enter image description here

2 个答案:

答案 0 :(得分:3)

这里有两个问题:

  • 您无法从屏幕截图中复制数字:您写了 14250221004866263104 ,但在屏幕截图中 14253330148871733248

  • float是32位类型,因此是4字节类型,如int,而不是8字节类型。

现在,如果我们只采用32位,我们可以看到它是:

uint myuint = 0xc5dd8000;

然后用:

[StructLayout(LayoutKind.Explicit)]
public struct SingleToInt32
{
    [FieldOffset(0)]
    public float Single;

    [FieldOffset(0)]
    public int Int32;

    [FieldOffset(0)]
    public uint UInt32;
}

float fl = new SingleToInt32 { UInt32 = myuint }.Single;

答案 1 :(得分:0)

这应该可以解决问题。

UInt64 MyLongInt = 14250221004866263104;
float My4ByteFloat = BitConverter.ToSingle(BitConverter.GetBytes(MyLongInt), 0);
Console.WriteLine(My4ByteFloat);