gpt4 book ai didi

c# - 获取非显式字段偏移量

转载 作者:太空狗 更新时间:2023-10-29 21:33:14 25 4
gpt4 key购买 nike

我有以下类(class):

[StructLayout(LayoutKind.Sequential)]
class Class
{
public int Field1;
public byte Field2;
public short? Field3;
public bool Field4;
}

如何获得 Field4 的字节偏移量从类数据(或对象头)的开头开始?
为了显示:
Class cls = new Class();
fixed(int* ptr1 = &cls.Field1) //first field
fixed(bool* ptr2 = &cls.Field4) //requested field
{
Console.WriteLine((byte*)ptr2-(byte*)ptr1);
}

在这种情况下,结果偏移量为 5,因为运行时实际上移动了 Field3到类型的末尾(并填充它),可能是因为它的类型是通用的。我知道有 Marshal.OffsetOf ,但它返回非托管偏移量,而不是托管。

如何从 FieldInfo 中检索此偏移量实例?是否有任何 .NET 方法用于此目的,或者我是否必须编写自己的方法,并考虑所有异常(类型大小、填充、显式偏移等)?

最佳答案

一些小技巧 TypedReference.MakeTypedReference ,可以获得对字段的引用,以及对象数据的开头,然后只需减去。该方法可以在 SharpUtils 中找到.

关于c# - 获取非显式字段偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30817924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com