如何将此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
?
答案 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);