我如何将 IEnumerable<long> 转换为 long

How i convert IEnumerable<long> to long

我为游戏制作了一个版本检查器。我们无法从任何地方看到游戏版本。我们刚刚找到了带有 Cheat 引擎的版本字符串。这是版本字符串地址 = 56 32 2E ?? ?? ?? 00 00

我正在使用 Memory.DLL 进行 ArrayOfBytes 扫描,然后我想将其更改为字符串。

我试了很多方法都解决不了。

此处出错:

using Memory;

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
        while (true)
        {
            int pID = m.getProcIDFromName("Growtopia");

            bool openProc = false;

            if (pID > 0) openProc = m.OpenProcess(pID);
            long myAobScan = m.AoBScan(0x700000000000, 0x7FFFFFFFFFFF, "56 32 2E ?? ?? ?? 00 00").Result; //ERROR AT HERE... // VERSION ADDRESS
            vers.Text = myAobScan.ToString();

            if (openProc)
            {
                m.writeMemory("0x7FF6F22818C7", "bytes", "0x90 0x90"); // BAN BYPASS
            }
        }
}

IEnumerable 参数:

public async Task<IEnumerable<long>> AoBScan(long start, long end, string search, bool writable = false, bool executable = true, string file = "")

IEnumerable 可以包含 0 到几十万个 long。所以你的问题是,它需要知道你想使用多长时间。

不知道 AoBScan 的行为方式(只知道参数对理解该方法的作用并不是很有帮助),很难判断您是只期待一个长的还是有很多可供选择的。

也就是说,要将 IEnumerable 转换为单个实例,您必须 select 其中一项。有几种方法可以做到...

您可以使用下面的方法拉出第一个

long myAobScan = m.AoBScan(0x700000000000, 0x7FFFFFFFFFFF, "56 32 2E ?? ?? ?? 00 00").Result.First();

或者下面拉出最后一个

long myAobScan = m.AoBScan(0x700000000000, 0x7FFFFFFFFFFF, "56 32 2E ?? ?? ?? 00 00").Result.Last();

或者写一个 Where 谓词来提取符合您期望的条件的谓词

long myAobScan = m.AoBScan(0x700000000000, 0x7FFFFFFFFFFF, "56 32 2E ?? ?? ?? 00 00").Result.Where(lng => lng > 10);

所有这些都会从 IEnumerable 中拉出一个 long。如果您需要将它们全部拉出并将它们转换为字符串,那就完全是另一个问题了。