Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > [C#] Приведение массива к структуре.


Автор: MuForum 30.11.2009, 15:42
Доброе время суток.
Работаю на "Microsoft Visual Studio 2008". (C#)

# Задача: Осуществить приведение массива к структуре.

Я решил это, но с использование небезопасного блока:
Код

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct HEADER_STR // 10 bytes;
{
    public byte     v1;
    public byte     v2;
    public ushort   v3;
    public ushort   v4;
    public byte     v5;
    public ushort   v6;
    public byte     v7;
}

int iHeaderSize = 0;
unsafe { iHeaderSize = sizeof(HEADER_STR); }

byte[] buffer = {10, 20, 30, 40, 50, 60, 70};
HEADER_STR sgHeader = new HEADER_STR();
unsafe
{
    Marshal.Copy(buffer, 0, new IntPtr(&sgHeader), sizeof(HEADER_STR));
}



P.S. -> Может кто-то знает другие решения данной задачи?


# Добавлено: Кое что накопал в инете.


# Вопрос: Как узнать размер структуры,
Код

int iHeaderSize = 0;
unsafe { iHeaderSize = sizeof(HEADER_STR); }

можно заменить на это:

int iHeaderSize = Marshal.SizeOf(typeof(HEADER_TGA)); 



# Вопрос: Как осуществить приведения массива к структуре?
Код

GCHandle pHandle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
MY_STRUCT sgHeader = (MY_STRUCT)Marshal.PtrToStructure(pHandle.AddrOfPinnedObject(), typeof(MY_STRUCT));
pHandle.Free();

и обращаемся к методам структуры: MY_STRUCT.Var ....

- Благодарность автору: http://geekswithblogs.net/taylorrich/archive/2006/08/21/88665.aspx;


P.S. -> Всех благодарю за внимание.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)