将 UInt64 转换为浮点数

Convert UInt64 to float

如何将此 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 吗?

编辑:

这应该可以解决问题。

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

这里有两个问题:

  • 您不能从屏幕截图中复制数字:您写了 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;