繁体   English   中英

将UInt64转换为float

[英]Convert UInt64 to float

如何将该UInt64转换为float

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

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

现在,我知道将8字节转换为4字节并不是最好的方法,并且在此过程中可能会出现一些问题,但是,由于Cheat Engine正在这样做并且它得到了正确的结果,那么这一定是可能的。

因此,有人知道如何将UInt64转换为float吗?

编辑: 在此处输入图片说明

在此处输入图片说明

这里有两个问题:

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

这应该可以解决问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM