| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > преобразование типов |
| Автор: jorikdima 6.10.2008, 21:01 | ||||
| Приветствую. У меня из com порта сыпятся набор байт, которые являются на самом деле сообщениями в определенном формате. Посылки, предположим по 64 байта, которые я принимаю и упаковывая в массив byte[64]. Этот массив передаю функции, которая парсит. Но внутри массива фактически лежат разные переменные разной длинны. Например может сначала лежать int32? а после него структура, ну предположим:
а еще лучше массив таких структур, а в еще более общем случае массив произвольных объектов. Как мне работать с этими объектами. В С я бы просто либо создал типизированный указатель на такой объект и сделал бы неявное преобразование типа:
А затем делая инкремент указателя обращался бы к каждому элементу массива моих объектов или структур. А тут в C# как? Как мне "посмотреть" на массив из 64 байт, как, например, на массив из 16 4 байтных int'ов или на массив из 4 структур типа STR? Спасибо. |
| Автор: MasterOfCode 7.10.2008, 06:17 |
| Как ты узнаешь что сейчас 64 байта представляют именно данную структуру? |
| Автор: jorikdima 7.10.2008, 07:18 | ||
в том то и дело, что я это знаю |
| Автор: MasterOfCode 7.10.2008, 07:21 |
| Ну раз знаешь какая структура, то распарсивай массив, потом уже эти данные преобразовывай. BitConverter тебе поможет. |
| Автор: jorikdima 7.10.2008, 07:32 | ||
Если не сложно покажи плиз, как массив byte[64] преобразовать к типу STR[8], где STR это произвольная структура (тип описан естественно), размером 8 байт. |
| Автор: MasterOfCode 7.10.2008, 07:44 | ||
Пишу "от руки":
Добавлено через 3 минуты и 41 секунду Может конечно можно и красивее сделать |
| Автор: jorikdima 7.10.2008, 07:51 | ||
Не-не-не
, а вообще говоря любую структуру, состоящую из value-type (ну или как там они называются, в общем int , short и пр) полей. В строку то я знаю как |
| Автор: MasterOfCode 7.10.2008, 08:15 | ||
У BitConverter есть такие методы как:
Подставляй их. Добавлено через 1 минуту и 51 секунду да, если структуру нужно заполнить то вместо List<string> lst; подставь свою структуру. |
| Автор: jorikdima 7.10.2008, 15:16 |
| Пожалуй я понял в чем моя проблема... Я привык что в С статические массивы занимают место в памяти последовательно, поэтому можно делать неявное преобразование типов к чему угодно. Тут же byte[64] это динамический массив и "взглянуть" на негопо другому никак нельзя, к сожалению. То есть конвертици неминуемо связана с вызовом некоторой функции преобразования. Будем думать. Спасибо, MasterOfCode. |
| Автор: PashaPash 7.10.2008, 17:53 |
| jorikdima, посмотри еще в сторону Marshal.PtrToStructure и Marshal.Copy. |