将byte []与T进行比较

时间:2012-08-13 18:09:33

标签: c# generics

我想列出指向另一个进程的进程内存中包含某个值的位置的指针。值可以是short,int,long,string,bool或其他值。

我的想法是使用泛型。我有一个问题,如何告诉编译器他需要什么类型转换字节数组?

这就是我所做的:

    public List<IntPtr> ScanProccessFor<T>(T ItemToScanFor)
    {
        List<IntPtr> Output = new List<IntPtr>();

        IntPtr StartOffset = SelectedProcess.MainModule.BaseAddress;
        int ScanSize = SelectedProcess.MainModule.ModuleMemorySize;

        for (int i = 0; i < ScanSize; i++)
            if (ReadMemory(SelectedProcess, StartOffset + i, (UInt16)Marshal.SizeOf(ItemToScanFor)) == ItemToScanFor)
                Output.Insert(Output.Count,StartOffset + i);

        return Output;
    }

如何告诉编译器他需要将byte []转换为类型T?

2 个答案:

答案 0 :(得分:2)

你的问题有点令人困惑,但我会尝试回答我的问题

我不是采用泛型类型,而是编写一个方法来接受IConvertableToByteArray之类的接口实例。

public IConvertableToByteArray
{    
    public byte[] ToByteArray();
}

然后,如果您需要允许特定类型与该方法兼容,则可以创建封装类

public IntConvertableToByteArray : IConvertableToByteArray
{
    public int Value{get; set;}

    public byte[] ToByteArray()
    {
        insert logic here
    }
}

答案 1 :(得分:1)

您可以使用Marshal.StructureToPtr来获取结构的非托管表示(必须是“简单”结构)。您可能需要特殊情况字符串。

你还应该考虑对你要搜索的内容的对齐限制 - 如果项目必须是4或8字节对齐,那么一次一个字节前进将非常缓慢和浪费。