public static unsafe Ex ByteArrayToEx(Ex *obj, int StartOffset, params byte[] bytes)
    {   // you should add some safely nets here sizeof(Ex) should used for size of struct
        byte *p = (byte *)obj;

        foreach (var b in bytes)
        {
            p[StartOffset++] = b;
        }
        return(*obj);
    }
    public static unsafe void ByteArrayToEx(Ex *obj, int offset, params byte[] bytes)
    {
        // you should add some safely nets here sizeof(Ex) should used for size of struct
        byte *p = (byte *)obj;

        foreach (var b in bytes)
        {
            p[offset++] = b;
        }
        // dont return value, it is expensive!
    }