![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| jorikdima |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 18.1.2008 Где: Там, где Зенит Репутация: нет Всего: нет |
Приветствую.
У меня из com порта сыпятся набор байт, которые являются на самом деле сообщениями в определенном формате. Посылки, предположим по 64 байта, которые я принимаю и упаковывая в массив byte[64]. Этот массив передаю функции, которая парсит. Но внутри массива фактически лежат разные переменные разной длинны. Например может сначала лежать int32? а после него структура, ну предположим:
а еще лучше массив таких структур, а в еще более общем случае массив произвольных объектов. Как мне работать с этими объектами. В С я бы просто либо создал типизированный указатель на такой объект и сделал бы неявное преобразование типа:
А затем делая инкремент указателя обращался бы к каждому элементу массива моих объектов или структур. А тут в C# как? Как мне "посмотреть" на массив из 64 байт, как, например, на массив из 16 4 байтных int'ов или на массив из 4 структур типа STR? Спасибо. |
||||
|
|||||
| MasterOfCode |
|
|||
|
elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 2 Всего: 27 |
Как ты узнаешь что сейчас 64 байта представляют именно данную структуру?
-------------------- ![]() |
|||
|
||||
| jorikdima |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 18.1.2008 Где: Там, где Зенит Репутация: нет Всего: нет |
в том то и дело, что я это знаю |
|||
|
||||
| MasterOfCode |
|
|||
|
elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 2 Всего: 27 |
Ну раз знаешь какая структура, то распарсивай массив, потом уже эти данные преобразовывай. BitConverter тебе поможет.
-------------------- ![]() |
|||
|
||||
| jorikdima |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 18.1.2008 Где: Там, где Зенит Репутация: нет Всего: нет |
Если не сложно покажи плиз, как массив byte[64] преобразовать к типу STR[8], где STR это произвольная структура (тип описан естественно), размером 8 байт. |
|||
|
||||
| MasterOfCode |
|
|||
|
elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 2 Всего: 27 |
Пишу "от руки":
Добавлено через 3 минуты и 41 секунду Может конечно можно и красивее сделать -------------------- ![]() |
|||
|
||||
| jorikdima |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 18.1.2008 Где: Там, где Зенит Репутация: нет Всего: нет |
Не-не-не
, а вообще говоря любую структуру, состоящую из value-type (ну или как там они называются, в общем int , short и пр) полей. В строку то я знаю как |
|||
|
||||
| MasterOfCode |
|
|||
|
elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 2 Всего: 27 |
У BitConverter есть такие методы как:
Подставляй их. Добавлено через 1 минуту и 51 секунду да, если структуру нужно заполнить то вместо List<string> lst; подставь свою структуру. -------------------- ![]() |
|||
|
||||
| jorikdima |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 18.1.2008 Где: Там, где Зенит Репутация: нет Всего: нет |
Пожалуй я понял в чем моя проблема... Я привык что в С статические массивы занимают место в памяти последовательно, поэтому можно делать неявное преобразование типов к чему угодно. Тут же byte[64] это динамический массив и "взглянуть" на негопо другому никак нельзя, к сожалению. То есть конвертици неминуемо связана с вызовом некоторой функции преобразования.
Будем думать. Спасибо, MasterOfCode. |
|||
|
||||
| PashaPash |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 9 Всего: 49 |
jorikdima, посмотри еще в сторону Marshal.PtrToStructure и Marshal.Copy.
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |