通过编组IntPtr将字节转换为枚举

时间:2019-08-06 13:27:40

标签: c#

我正在尝试将大小为1的字节数组转换为枚举:

public enum InformationMessageLevel : byte
{
    Information = 0,
    Warning = 1,
    Error = 2,
    Fatal = 3
}

使用编组:

   // bytes = byte[1] = 0
   // t is typeof(InformationMessageLevel)
unsafe
{
    fixed (byte* p = bytes)
    {
        var localPtr = p;

        return Marshal.PtrToStructure((IntPtr)localPtr, t);
    }
}

但是我得到了错误:

  

“指定的结构必须是可漂白的或具有布局   信息。\ r \ n参数名称:结构“

我使用与 IntPtr 进行封送处理的原因是,该方法用于将数据动态反序列化为不同类型的属性。

1 个答案:

答案 0 :(得分:1)

不使用封送处理的动态解决方案:

byte[] bytes = { 0 };
var t = typeof(InformationMessageLevel);
var result = Enum.ToObject(t, bytes[0]);

Console.WriteLine(result);

输出:

Information