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

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

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


ругается. структура не тип. а что делать? структура не поддается рефлексии.
...
Рейтинг: 0 / 0
Конвертация с Big Endian в Little Endian и обратно.
    #39565639
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7, IsValueType
...
Рейтинг: 0 / 0
Конвертация с Big Endian в Little Endian и обратно.
    #39565696
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7ругается. структура не тип. а что делать?
Забить на программирование или учить матчасть.
...
Рейтинг: 0 / 0
Конвертация с Big Endian в Little Endian и обратно.
    #39565704
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
buserjenya7, IsValueType
не работает. и ValueType тоже
...
Рейтинг: 0 / 0
Конвертация с Big Endian в Little Endian и обратно.
    #39565721
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7не работает. и ValueType тоже
Печалька
...
Рейтинг: 0 / 0
Конвертация с Big Endian в Little Endian и обратно.
    #39565725
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7У меня две системы с разными Endianess. Я посылаю данные по TCP
Связать системы протоколом наследником. Т.е. выше уровнем.
...
Рейтинг: 0 / 0
Конвертация с Big Endian в Little Endian и обратно.
    #39565749
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123jenya7У меня две системы с разными Endianess. Я посылаю данные по TCP
Связать системы протоколом наследником. Т.е. выше уровнем.
Никакой протокол не перевернет ваши данные. вы сами должны разруливать эту ситуацию. если только протокол писанный руками.
гораздо проще взять данные и перевернуть их. у меня данные в структурах. я ищу генерик способ перебрать все члены структуры и перевернуть их в соответствии с типом.
...
Рейтинг: 0 / 0
Конвертация с Big Endian в Little Endian и обратно.
    #39565921
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7,
Ты о чём?
В протоколе пересылается ключ=значение.
Не надо переворачивать).
...
Рейтинг: 0 / 0
Конвертация с Big Endian в Little Endian и обратно.
    #39565940
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хочется двоичный протокол - переворачивайте байты сколько влезет
Код: 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
Конвертация с Big Endian в Little Endian и обратно.
    #39565943
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
структура
Код: c#
1.
[StructLayout(LayoutKind.Sequential)]
...
Рейтинг: 0 / 0
Конвертация с Big Endian в Little Endian и обратно.
    #39566029
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропилхочется двоичный протокол - переворачивайте байты сколько влезет
Код: 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
Конвертация с Big Endian в Little Endian и обратно.
    #39566045
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
на строчке
Код: 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
Конвертация с Big Endian в Little Endian и обратно.
    #39566054
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7сложные структуры. структура в структуре да еще массив внутри.
Как вариант сериализация объектов или json
...
Рейтинг: 0 / 0
Конвертация с Big Endian в Little Endian и обратно.
    #39566067
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123jenya7сложные структуры. структура в структуре да еще массив внутри.
Как вариант сериализация объектов или json
после сериализации я не знаю где какой член структуры. нет возможности перевернуть. мне нужно перевернуть - сделать сериализацию - отправить.
...
Рейтинг: 0 / 0
Конвертация с Big Endian в Little Endian и обратно.
    #39566074
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Конвертация с Big Endian в Little Endian и обратно.
    #39566106
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЕвгенийВjenya7получаю ошибку
пропущено...

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

using System.Reflection;

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


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

using System.Reflection;

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


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


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