枚举大小以字节为单位
以字节为单位的枚举大小是多少?
public enum MMTPCnxNckRsn { MMTPCnxNckRsnNoAnswer = -2, MMTPCnxNckRsnSendError = -1, MMTPCnxNckRsnOk = 0, MMTPCnxNckRsnInvalidMember = 1, MMTPCnxNckRsnHubNotReady = 2, MMTPCnxNckRsnUnknownMember = 3, MMTPCnxNckRsnLastCnxTooRecent = 4, MMTPCnxNckRsnInvalidVersion = 5, MMTPCnxNckRsnInvalidOptions = 6, MMTPCnxNckRsnTooManyCnx = 7 };
我已经使用下面的代码找到它,但我认为它还不够……它是一个包含10个元素的字符串数组。我应该计算每个元素中的字符数,假设每个字符1个字节并添加所有字节的元素? 那么无符号数呢?
var size = Enum.GetNames(typeof(MMTPCnxNckRsn)).Length; var arr = Enum.GetNames(typeof (MMTPCnxNckRsn));
我不确定是否重要的是提到我正在将本地win32代码marshaling
到c#中,并且找到用于管理内存中地址的枚举大小是很重要的。
文件说:
枚举元素的默认基础类型是int。
因此,您的数据类型将具有4个字节的大小,这是int的大小。
您可以使用以下命令进行确认:
Marshal.SizeOf(Enum.GetUnderlyingType(typeof(MMTPCnxNckRsn)));
虽然您使用名称引用源代码中的枚举值,但它们在计算机上作为整数值运行的代码中表示。 所以你对字符串数组的评论是相当广泛的。
我也认为你过分思考尺寸问题。 看看你最近的另一个问题,你似乎正在将C ++结构转换为C#以进行pinvoke。 好吧,C#enum将直接映射到C ++枚举。 pinvoke marshaller将照顾尺寸并为您布置它们。 您不需要明确处理它。