Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Конвертация с Big Endian в Little Endian и обратно. / 25 сообщений из 26, страница 1 из 2
06.12.2017, 16:08
    #39565221
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
У меня две системы с разными Endianess. Я посылаю данные по TCP.
Мне приходиться брать структуру, и переворачивать каждый член структуры.
А на другом конце по опкоду я знаю какая структура пришла и также переворачиваю каждый член структуры.
Вопрос можно как то генерик способом взять объект типа структура, проверить каждое поле сколько бит 32, 16
и так далее и в соответствии с этим перевернуть поле?
...
Рейтинг: 0 / 0
07.12.2017, 08:53
    #39565544
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
Можно.
Рефлексией перебрать все поля и для каждого получись смещение от начала структуры

На stackoverflow масса примеров
...
Рейтинг: 0 / 0
07.12.2017, 09:46
    #39565577
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
ИзопропилМожно.
Рефлексией перебрать все поля и для каждого получись смещение от начала структуры

На stackoverflow масса примеров
а как задать поиск в гугле? по каким словам?
...
Рейтинг: 0 / 0
07.12.2017, 09:48
    #39565580
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
...
Рейтинг: 0 / 0
07.12.2017, 10:19
    #39565600
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
...
Рейтинг: 0 / 0
07.12.2017, 10:50
    #39565626
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
делаю так
Код: c#
1.
2.
3.
4.
5.
6.
7.
 void BigToLitle(object obj)
 {
    Type mytype = obj.GetType(); 
     if (mytype.Equals(typeof(struct)))  
     {
     }     
}


ругается. структура не тип. а что делать? структура не поддается рефлексии.
...
Рейтинг: 0 / 0
07.12.2017, 11:09
    #39565639
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
jenya7, IsValueType
...
Рейтинг: 0 / 0
07.12.2017, 11:48
    #39565696
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
jenya7ругается. структура не тип. а что делать?
Забить на программирование или учить матчасть.
...
Рейтинг: 0 / 0
07.12.2017, 11:54
    #39565704
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
buserjenya7, IsValueType
не работает. и ValueType тоже
...
Рейтинг: 0 / 0
07.12.2017, 12:08
    #39565721
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
jenya7не работает. и ValueType тоже
Печалька
...
Рейтинг: 0 / 0
07.12.2017, 12:08
    #39565725
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
jenya7У меня две системы с разными Endianess. Я посылаю данные по TCP
Связать системы протоколом наследником. Т.е. выше уровнем.
...
Рейтинг: 0 / 0
07.12.2017, 12:36
    #39565749
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
Petro123jenya7У меня две системы с разными Endianess. Я посылаю данные по TCP
Связать системы протоколом наследником. Т.е. выше уровнем.
Никакой протокол не перевернет ваши данные. вы сами должны разруливать эту ситуацию. если только протокол писанный руками.
гораздо проще взять данные и перевернуть их. у меня данные в структурах. я ищу генерик способ перебрать все члены структуры и перевернуть их в соответствии с типом.
...
Рейтинг: 0 / 0
07.12.2017, 15:02
    #39565921
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
jenya7,
Ты о чём?
В протоколе пересылается ключ=значение.
Не надо переворачивать).
...
Рейтинг: 0 / 0
07.12.2017, 15:12
    #39565940
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
хочется двоичный протокол - переворачивайте байты сколько влезет
Код: 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.
 public void enumFields(Type t)
        {
            foreach (var fi in t.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance))
            {
                Type fieldType = fi.FieldType;
                IntPtr offset = Marshal.OffsetOf(t, fi.Name);                
                int fieldSize = Marshal.SizeOf(fieldType);
                if (!fieldType.IsNested)
                {
                    Console.WriteLine("field: {0} {1} {2}", fieldType.Name, offset, fieldSize);
                }
                else
                {
                    FixedBufferAttribute fa = (FixedBufferAttribute)fi.GetCustomAttribute(typeof(FixedBufferAttribute));
                    if (fa != null)
                    {
                        Type elementType = fa.ElementType;
                        var count = fa.Length;
                        fieldSize = Marshal.SizeOf(elementType);
                        Console.WriteLine("array: {0} {1} {2} {3}", elementType.Name, offset, fieldSize,count);
                    }
                }

            }
        }


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
unsafe struct A
    {

        Int32 a;
        Int16 b;
        UInt16 c;
        Int32 d;
        Int64 g;
        double h;
        SByte w;
        fixed Int16 rr[5];
        Single v;
        int er;
    }
...
Рейтинг: 0 / 0
07.12.2017, 15:13
    #39565943
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
структура
Код: c#
1.
[StructLayout(LayoutKind.Sequential)]
...
Рейтинг: 0 / 0
07.12.2017, 16:17
    #39566029
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
Изопропилхочется двоичный протокол - переворачивайте байты сколько влезет
Код: 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.
 public void enumFields(Type t)
        {
            foreach (var fi in t.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance))
            {
                Type fieldType = fi.FieldType;
                IntPtr offset = Marshal.OffsetOf(t, fi.Name);                
                int fieldSize = Marshal.SizeOf(fieldType);
                if (!fieldType.IsNested)
                {
                    Console.WriteLine("field: {0} {1} {2}", fieldType.Name, offset, fieldSize);
                }
                else
                {
                    FixedBufferAttribute fa = (FixedBufferAttribute)fi.GetCustomAttribute(typeof(FixedBufferAttribute));
                    if (fa != null)
                    {
                        Type elementType = fa.ElementType;
                        var count = fa.Length;
                        fieldSize = Marshal.SizeOf(elementType);
                        Console.WriteLine("array: {0} {1} {2} {3}", elementType.Name, offset, fieldSize,count);
                    }
                }

            }
        }


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
unsafe struct A
    {

        Int32 a;
        Int16 b;
        UInt16 c;
        Int32 d;
        Int64 g;
        double h;
        SByte w;
        fixed Int16 rr[5];
        Single v;
        int er;
    }


спасибо большое. попробую. у меня есть сложные структуры. структура в структуре да еще массив внутри.
...
Рейтинг: 0 / 0
07.12.2017, 16:37
    #39566045
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
на строчке
Код: c#
1.
FixedBufferAttribute fa = (FixedBufferAttribute)fi.GetCustomAttribute(typeof(FixedBufferAttribute));


получаю ошибку
авторSeverity Code Description Project File Line Suppression State
Error CS1061 'FieldInfo' does not contain a definition for 'GetCustomAttribute' and no extension method 'GetCustomAttribute' accepting a first argument of type 'FieldInfo' could be found (are you missing a using directive or an assembly reference?)
...
Рейтинг: 0 / 0
07.12.2017, 16:46
    #39566054
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
jenya7сложные структуры. структура в структуре да еще массив внутри.
Как вариант сериализация объектов или json
...
Рейтинг: 0 / 0
07.12.2017, 16:51
    #39566067
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
Petro123jenya7сложные структуры. структура в структуре да еще массив внутри.
Как вариант сериализация объектов или json
после сериализации я не знаю где какой член структуры. нет возможности перевернуть. мне нужно перевернуть - сделать сериализацию - отправить.
...
Рейтинг: 0 / 0
07.12.2017, 17:00
    #39566074
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
jenya7получаю ошибку
авторSeverity Code Description Project File Line Suppression State
Error CS1061 'FieldInfo' does not contain a definition for 'GetCustomAttribute' and no extension method 'GetCustomAttribute' accepting a first argument of type 'FieldInfo' could be found (are you missing a using directive or an assembly reference?)

using System.Reflection;
...
Рейтинг: 0 / 0
07.12.2017, 17:34
    #39566106
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
ЕвгенийВjenya7получаю ошибку
пропущено...

using System.Reflection;
включено. есть метод GetCustomAttribute s но у него другие аргументы.
...
Рейтинг: 0 / 0
07.12.2017, 17:37
    #39566112
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
jenya7после сериализации я
Сериализуют голые объекты. Без методов.
ООП.
Без неё - json
...
Рейтинг: 0 / 0
07.12.2017, 17:40
    #39566116
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
ЕвгенийВjenya7получаю ошибку
пропущено...

using System.Reflection;

Код: c#
1.
using System.Runtime.CompilerServices;


Современная студия умеет показывать где искать
...
Рейтинг: 0 / 0
07.12.2017, 18:30
    #39566155
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
ИзопропилЕвгенийВпропущено...

using System.Reflection;

Код: c#
1.
using System.Runtime.CompilerServices;


Современная студия умеет показывать где искать
включил. но все равно не находит GetCustomAttribute.
...
Рейтинг: 0 / 0
07.12.2017, 19:00
    #39566177
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертация с Big Endian в Little Endian и обратно.
jenya7GetCustomAttribute.
это метод экземпляра System.Reflection.FieldInfo
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Конвертация с Big Endian в Little Endian и обратно. / 25 сообщений из 26, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]