我想从应用于以下结构的StructLayout中获取22字节的结构大小。
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Ansi, Pack = 1, Size = 22)]
internal unsafe struct Entry
{
[FieldOffset(0)]
private fixed char title[14];
[FieldOffset(14)]
private readonly int size;
[FieldOffset(18)]
private readonly int start;
}
一个建议使用Marshal.SizeOf,但是它返回不希望的28字节非托管对象的大小。
int count = Marshal.SizeOf(typeof(Entry));
但是,由于数组“ customAttributes”的长度始终为0,因此似乎无法获得此属性。
var type = typeof(Entry);
var customAttributes = type.GetCustomAttributes(typeof(StructLayoutAttribute), true);
任何解决方法?
参考方案
StructLayout属性中的信息作为IL指令而不是自定义属性嵌入到方法中。要检索它,可以使用Type.StructLayoutAttribute Property:
var type = typeof(Entry);
var sla = type.StructLayoutAttribute;
另外,如果该结构在您的控制之下,则可以简单地定义一个Size常量:
[StructLayout(LayoutKind.Explicit, Pack = 1, Size = Entry.Size)]
internal unsafe struct Entry
{
public const int Size = 22;
...
如何获得与.NET属性关联的类/属性/等? - c#如果我将自定义属性应用于类,例如:[Foo] class Bar {} 很明显,当我检索我的Foo属性实例时,它与Bar关联。在Foo实现内部,在ctor中说,如何获取与属性实例相关联的类?到目前为止,我所能想到的就是将其放入属性的ctor中:[Foo(typeof(Bar)] class Bar {} 这似乎太多余了。 参考方案 您必须传递它。请参阅此答案…
Java中的python struct.unpack - java我对Python很陌生,一直在尝试在Java中移植python脚本。一段时间以来,我一直坚持下面的代码逻辑,试图将其转换为Java,但未能这样做(可能是因为我误解了实际所做的事情)data = unpack('>H', file.read(2)) if data == 0xffff then //do something else …
LeetCode题解计算机为什么是基于二进制的?可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制
LeetCode题解统计城市的所有灯泡这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…
LeetCode题解黑白圆盘一个圆盘被涂上了黑白二色,两种颜色各占一个半圆。圆盘以一个未知的速度、按一个未知的方向旋转。你有一种特殊的相机可以让你即时观察到圆上的一个点的颜色。你需要多少个相机才能确定圆盘旋转的方向?题解:可以用一个相机即可