Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
AlexJumper

Преобразовать экземпляр структуры в массив байт

26.02.2013, 00:05. Показов 2553. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Народ, передо мной стоит задача: преобразовать экземпляр структуры, одним из полей которых является объект Hashtable, то есть reference type, в массив байт для дальнейшей их передачи по сети, приема на другой стороне и обратного преобразования. Такую штуку я проделывал со структурами, полями которой являлись value types - булевые и целочисленные свойства, которые обращались к внутреннему байтовому массиву, что-то типа того:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
struct DeviceState
    {
        [MarshalAs(UnmanagedType.ByValArray, Size = 1200)]
        byte[] myArray;
        public DeviceState ()
        {
            myArray = new byte[1200];
        };
        byte GetByte(int index)
        {
            return myArray[index];
        }
        void SetByte(int index, byte newValue)
        {
            myArray[index] = newValue;
        }
        public byte Byte0 {
            get { return GetByte (0); }
            set { SetByte (0, value); }
        }
    }
И преобразование в неуправляемую память происходило на ура с помощью статического класса Marshal.
Но вот незадача, решил я применить вместо байтового массива Hashtable, так как уже не битовые данные были, а целочисленные, дата/время, строки... То есть вышеуказанная структура трансформировалась в примерно вот что:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct DeviceState
    {
        Hashtable stateDevice;
        public DeviceState ()
        {
            stateDevice = new Hashtable();
            InitHashtable(); // первичное добавление ключей
 
        };
        void InitHashtable ()
        {
            // some code
        }
        public object SomeProperty {
            get { return stateDevice["SomePropertyKey"]; }
            set { stateDevice["SomePropertyKey"] = value; }
        }
    }
И что мне теперь делать, подскажите? Как мне ее теперь "упаковать" в неуправляемый код, и "распаковать" обратно?
Копал в теме CustomMarshaler, особо ничего не понял... Растолкуйте пожалуйста.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.02.2013, 00:05
Ответы с готовыми решениями:

Преобразовать Bitmap в массив байт
Возник вопрос. Как преобразовать Bitmap в массив байт и обратно?

Массив байт преобразовать в строку (C++)
Имеется массив символов array<Byte> Необходимо все содержимое перенести в строку типа System.String как это сделать средствами дотнета? ...

Преобразовать число в массив байт
Приветствую уважаемые форумчане, есть задача преобразовать целое число с максимальным значением 16777215 или в HEX = FFFFFF. Число...

1
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
26.02.2013, 00:27
AlexJumper, маршалингом здесь вопрос нормально не решить, т.к. данные могут быть любые, а далеко не каждый тип в .NET можно преобразовать в unmanaged-подобный с ходу или малой кровью, смотрите в сторону сериализации (например BinaryFormatter'ом), удобней и легче.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.02.2013, 00:27
Помогаю со студенческими работами здесь

Как преобразовать массив байт (16) в 4 uint
Добрый день Как быстро (и просто) преобразовать массив байт в 4 беззнаковых 32-битных числа? Т.е. byte byteArray = new byte...

Преобразовать картинку в массив байт и обратно
Здравствуйте. Пожалуйста, объясните, как можно картинку преобразовать в набор байтов и обратно с примерами. Просто стоит задание, по...

Как преобразовать число в массив байт
int n = 222333; // hex: 0003647D нужно получить массив байт из переменной n вида: byte m = {0x00, 0x03, 0x64 ,0x7D}; // порядок...

Как преобразовать int в массив байт?
Как преобразовать число типа int в массив байт, чтобы можно было из передать по последовательному порту? И какой байт идет первым? Старший...

Преобразовать массив байт в десятичное число
Здравствуйте, товарищи! Есть массив байт byte bytes = { 48, 51, 48, 48 }; где элементы массива представляют собой символы Unicode,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru