1 | ||||||
Маршалинг структур: динамическое управление размером08.11.2012, 09:52. Показов 3029. Ответов 10
Метки нет (Все метки)
Решил изучить как с помощью средств c# передавать структуры. Нашел способы преобразования структур в массив байт с помощью Marashal. Вот код структуры:
0
|
08.11.2012, 09:52 | |
Ответы с готовыми решениями:
10
Маршалинг структур. Размер string Динамическое создание строки с нужным размером Динамическое добавление объектов(структур) Динамическое размещение массива структур |
352 / 331 / 49
Регистрация: 12.12.2011
Сообщений: 563
|
||||||
08.11.2012, 14:08 | 2 | |||||
Я пользовался примерно таким костылем
1
|
08.11.2012, 14:40 [ТС] | 3 | ||||||||||
Yukikaze, интересный костыль) после такого явно все больше появляется желание писать на плюсах или чистом си передачу структур по сети) Но как я понимаю у меня все равно остается фиксированный массив _data[254]. Я ищу способ примерно такой:
Изначально я пытался вот таким способом переводить данные структуры в массив байт:
0
|
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
|
|
08.11.2012, 15:32 | 4 |
если надо передавать данные неизвестного размера придется отправлять их размер вместе с ними
структуру заменить класс, сделать свое преобразование в байты и обратно по своим правилам
1
|
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
|
|
08.11.2012, 15:53 | 6 |
да все почти так же как в приведенном StructToByteArray, просто перед записью данных записать их размер(это же не SizeOf будет, а руками посчитать)
1
|
08.11.2012, 16:02 [ТС] | 7 | |||||||||||||||
m0nax, до вот в этом то и проблема щас. Приведу примеры.
Допустим есть структура:
32383233343439313230 Если отбрасывать приписанные 3-йки перед каждой цифрой то получу строку со своими значениями, остается вопрос как считать? Например. Допустим я избавился от троек, домножив каждый байт(32 - это один байт) на 0x0F, вот теперь проблема в числах. Как их растосовать по переменным, понимаю что 2-йку(тип пакета) не трудно забрать, а вот 28 как вытащить? Я все к тому что число может быть и из 3 цифр и 10, это же ведь надо как то определить. Я пытался считывать из массива байт примерно вот таким образом переменные:
0
|
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
|
|
08.11.2012, 16:06 | 8 |
Причем тут строка?
есть структура, переводишь ее в байты и отправляешь на другой стороне получаешь в виде байтов и конвертируешь в структуру в каком месте тут появилась строка? вместо StreamWriter использовать BinaryWriter...
0
|
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
|
|
08.11.2012, 16:12 | 10 |
просто читай в том же порядке что записывал, числа всегда занимают фиксированный размер поэтому хоть там 2 хоть 3463453456 не имеет значения, это все равно 4 байта (Int) и любой BinaryReader прекрасно это прочитает
1
|
08.11.2012, 16:18 [ТС] | 11 |
m0nax, Заработало) и с string тоже норм работает, не надо даже указывать размер) Спасибо за подсказки, теперь все работает как надо)
0
|
08.11.2012, 16:18 | |
08.11.2012, 16:18 | |
Помогаю со студенческими работами здесь
11
Динамическое размещение массива структур Динамическое управление памятью Динамическое управление памятью Динамическое управление компонентами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |