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

Подобие union в с#

09.10.2016, 19:30. Показов 4654. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем!
Столкнулся с проблемой, в с# нет объединения в структур. Кто как выходит из этой ситуации. Мне необходимо массив byte[] data раскидать по переменным.

C#
1
2
3
4
5
6
7
8
struct Getdata{
Byte[] data;
 
UInt32 P1;
UInt32 P2;
UInt32 P3;
Uint32 P4;
}
Если с синтаксисом ошибся, не вините пишу с телефона.
Эту структуру написал с использованием marshal, explicite, offset. Но, отладчик не позволяет мне запустить код, жалуется на массив byte[] data, хотя в fieldoffset я всем переменным указал их размеры принудительно.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.10.2016, 19:30
Ответы с готовыми решениями:

Как на C# реализовать подобие union в С++
Доброй ночи, товарищи! Подскажите, как реализовать подобие объединения union в C#? Суть проблемы в следующем: есть массив ...

C++ union на C#
Каким образом это можно сделать в C#. Необязательно,чтобы это была структура,просто может как-то проще можно? Я просто себе уже голову...

C++ Union в C#
Здравствуйте! Пишу программу на C# и столкнулся с проблемой, что dll написанная на с++ и использует Union структуру. Помогите,...

25
Эксперт .NET
 Аватар для Usaga
14341 / 9435 / 1358
Регистрация: 21.01.2016
Сообщений: 35,562
10.10.2016, 10:47
Студворк — интернет-сервис помощи студентам
Blastry, убери атрибут [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] в примере Someone007, этого не было.
0
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 41
10.10.2016, 11:03  [ТС]
Ну а толку? Что с этой строкой, что без нее - ошибка не в этом кроется, а в формате данных. Вы сейчас про смещение говорите, но с ними все впорядке.
0
Эксперт .NET
 Аватар для Usaga
14341 / 9435 / 1358
Регистрация: 21.01.2016
Сообщений: 35,562
10.10.2016, 11:07
Лучший ответ Сообщение было отмечено Blastry как решение

Решение

Blastry, у меня такой вариант прекрасно работает:

Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using System;
using System.Runtime.InteropServices;
 
namespace NETExperiments
{
    [StructLayout(LayoutKind.Explicit)]
    public unsafe struct GetData
    {
        [FieldOffset(0)]
        public fixed Byte Data[16];
 
        [FieldOffset(0)]
        UInt32 P1;
        [FieldOffset(4)]
        UInt32 P2;
        [FieldOffset(8)]
        UInt32 P3;
        [FieldOffset(12)]
        UInt32 P4;
    }
 
    class Program
    {
        static unsafe void Main(string[] args)
        {
            GetData bigBytesUART = new GetData();
 
            for (int i = 0; i < 16; i++)
            {
                bigBytesUART.Data[i] = (byte)i;
            }
 
            Console.ReadKey();
        }
    }
}


Выложи сюда свой проект, чтобы люди посмотреть могли что у тебя там такое...
0
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
10.10.2016, 11:08
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    [StructLayout(LayoutKind.Explicit)]
    public unsafe struct GetData
    {
        [FieldOffset(0)]
        public fixed byte data[16];
 
        [FieldOffset(0)]
        public uint P1;
        [FieldOffset(4)]
        public uint P2;
        [FieldOffset(8)]
        public uint P3;
        [FieldOffset(12)]
        public uint P4;
    }
Миниатюры
Подобие union в с#  
0
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
10.10.2016, 11:11
По аналогии, работа с фиксированным массивом байт.
Миниатюры
Подобие union в с#  
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
10.10.2016, 18:48
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    unsafe class Program
    {
        [StructLayout(LayoutKind.Sequential, Pack = 1)]
        public struct GetData
        {
            public UInt32 P1;
            public UInt32 P2;
            public UInt32 P3;
            public UInt32 P4;
        };
 
        static void Main(string[] args)
        {
            Byte[] buff = new Byte[16];
 
            fixed(byte* ptr = buff)
            {
                GetData* pData = (GetData*)ptr;
 
                pData->P1 = 1;
                pData->P2 = 2;
                pData->P3 = 3;
                pData->P4 = 4;
            }
        }
    }
Не понимаю зачем тут union, если байт это и так минимальная единица данных которую можно представить в C# и с которой можно работать без проблем -> можно работать напрямую с массивом, с фрагментом памяти в котором он лежит.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.10.2016, 18:48
Помогаю со студенческими работами здесь

Аналог union в C#
Всем привет. Нужно взаимодействовать с C-библиотекой. При вызове функции из этой библиотеке ей нужно передать union структуру. Выглядит эта...

Существует ли аналог union из С++ в С#?
собственно вот и вопрос. А то стала задача сделать из двух byte один short. Пришлось парсить через string, а это хинди-кодом попахивает.

union как определить из какой таблице запись после UNION?
Подскажите пожалуйста! Вот например две таблице (TEBLE_1) у которой поля row_1(BIGINT) и (TABLE_2) у которой поля row_2(TEXT) Я ИХ...

Union
Здравствуйте. Нужно сортировать записи в 2х таблицах по дате. Следующий запрос все делает как надо. SELECT date FROM a ...

UNION
Всем привет.Ребят как вывести средствами php результат запроса в котором применялся union?Например: SELECT text FROM article WHERE...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
Диалоги с ИИ
zorxor 23.05.2026
Насколько я понимаю - Вы - Искусственный Интеллект. Это так? Да, всё верно. Я — искусственный интеллект. Я представляю собой большую языковую модель, созданную для помощи в самых разных задачах. . . .
Модель здравосохранения 14. Собираем всю модель вместе.
anaschu 22.05.2026
Модель собрана. В будущих постах на видео я покажу, как она работает. В этом посте запускаем её, проверяем результаты и разбираем что можно с ней делать дальше. Перед запуском проверяем. . .
Модель здравоохранения 13. Добавление самой системы здравоохранения.
anaschu 22.05.2026
В предыдущем посте мы настроили болезни. Теперь добавим события, которые управляют здоровьем всего коллектива, а также настроим рабочий график и расчёт финансов. В Main создаём четыре события. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru