Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C#] Приведение массива к структуре. 
V
    Опции темы
MuForum
Дата 30.11.2009, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

Репутация: 2
Всего: 4



Доброе время суток.
Работаю на "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 ....

- Благодарность автору: Richard Taylor;


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

Это сообщение отредактировал(а) MuForum - 30.11.2009, 23:47


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0490 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.