powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Разбираем массив байтов типа Object
25 сообщений из 49, страница 1 из 2
Разбираем массив байтов типа Object
    #39777127
mozgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Собственно сабж в сабже =)

Имею некоторый массив байтов типа object. В этом массиве "зашифрованы" некоторое кол-во нужных мне данных (кол-во переменных и их порядок известны) разных типов (string, float, int и тд). Задача - разобрать этот массив и вычленить необходимую информацию.

Что делаль:
1) Пробую просто:
Код: c#
1.
 Console.WriteLine(Encoding.UTF8.GetString(obj, 0, 20)); 


Логично не работает, просит byte[].

2) Пробую быстро:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
BinaryFormater bf = new BinaryFormater();
byte[] bytesArr;
Using (var ms = new MemoryStream())
{
bf.Serialize(ms, obj);
bytesArr = ms.ToArray;
Console.WriteLine(Encoding.UTF8.GetString(bytesArr, 0, 20));
}


Что-то получаю, но получаю ахинею. В bytesArr лежит вообще что-то "левое", а не исходный массив. Еще и сам массив из исходных 578 элементов вырос до 606.

3) Пробую BinaryReader:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
BinaryFormater bf = new BinaryFormater();
Using (var ms = new MemoryStream())
{
bf.Serialize(ms, obj);
Using (BinaryReader reader = new BinaryReader(ms))
{
Console.WriteLine(reader.ReadString());
}
}


Получаю exeption: Unable to read beyond the end of the stream.

4) пробую с BinaryReader.PeekChar:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
BinaryFormater bf = new BinaryFormater();
Using (var ms = new MemoryStream())
{
bf.Serialize(ms, obj);
Using (BinaryReader reader = new BinaryReader(ms))
{
while (reader.PeekChar() > -1)
{
Console.WriteLine(reader.ReadString());
}
}
}


В тело цикла не попадаю, видать reader.PeekChar() не находит следующий символ, а в самом reader _buffer лежит та же ерунда, что и в попытке №2, но всего 256 элементов.

Короче, запутался и замучился. Ребят, как этот массив разобрать?

Зы: По форуму смотрел, темы есть, не помогло. Гугль читал, инфы много, не получилось. MS FM курил, но видать слабО...
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777144
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мысль про банальный тайпкастинг к byte[] в голову не приходила?
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777147
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozgen,

Код: c#
1.
2.
3.
4.
5.
6.
7.
var myObj = new MyObj()
myObj.Read(byte[]источник);
...
public virtual ImyObjectDemo Read( byte [data]) {
       using (Stream stream = new....
                return Read(stream) ;
Далее BinaryReader(stream
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777298
mozgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры Павловны,

Приходила. Варианты реализации подскажешь?)
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777299
mozgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Эмм... не понял, а зачем? можно как-нибудь подробнее..
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777315
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
mozgenСон Веры Павловны,

Приходила. Варианты реализации подскажешь?)
Код: c#
1.
2.
object o = new byte[] { 1, 2, 3, 4, 5 };
byte[] b = (byte[])o;
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777332
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozgenPetro123,

Эмм... не понял, а зачем? можно как-нибудь подробнее..что зачем?
По ООП я твои зашифрованные данные записал в класс myObj.
Пропиши там твои поля и пробуй.
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777333
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,

)))
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777337
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozgenзашифрованы" некоторое кол-во нужных мне данных (кол-во переменных и их порядок известны) разных типов (string, float, int и тд)покажи класс с этими переменными
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777474
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Petro123mozgenзашифрованы" некоторое кол-во нужных мне данных (кол-во переменных и их порядок известны) разных типов (string, float, int и тд)покажи класс с этими переменными
Ты думаешь там есть класс?
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777535
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,
)) я просто напомнил, что "руки мыть хорошо перед едой".
Ну и загрузил ТС работой.
Пусть работает.
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777682
mozgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123покажи класс с этими переменными
Cat2Ты думаешь там есть класс?
Совершенно верно, нет у меня никакого класса. По сути, я и что хранится в этом массиве знаю условно приблизительно.

Petro123Ну и загрузил ТС работой.
Пусть работает.

Вот уж спасибо! =)

В любом случае, я просил подсказать в какую сторону копать. Будем пробовать. =)
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777695
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozgen,

Уверен в том, что тебе нужна десериализвция?
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777699
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozgenПо сути, я и что хранится в этом массиве знаю условно приблизительно.не выйдет. Надо точно знать что там. Иначе заголовок нужен.
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777707
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozgenПо сути, я и что хранится в этом массиве знаю условно приблизительно.
А что это такое, откуда берётся? Чем данные "зашифрованы"? Может Protocol Buffers какой?
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777710
mozgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропил,

нееет, не уверен =)

Petro123не выйдет. Надо точно знать что там. Иначе заголовок нужен.
Понятно. Скажем так, у меня есть некоторый "конфигурационный" файл, в котором описана структура. Например:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<Types>
 <Type name="typeA">
  <String name="str" Length="20">
  <Float name="floatVal">
  <Int name="intVal">
 <Type/>
  <Type name="typeB">
  <String name="str" Length="20">
  <Float Length="4" name="floatVal">
  <Int Length="2" name="intVal">
 <Type/>
<Types/>


По идее, в получаемом мной объекте, элементы массива должны располагаться именно в том порядке, в каком указаны в конфиге.
Ну допустим, разобрать этот конфиг и создать необходимый класс со всеми подкласами я могу. В результате получим что-то типа такого:
Код: 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.
Class types
{
 Class typeA
 {
   public string str;
   public float floatVal;
   public int intVal;
   public typeAFill(string str1, float floatVal1, int intVal1)
   {
     str = str1;
     floatVal = floatVal1;
     intVal = intVal1;
   }
 }
 Class typeB
 {
   public string str;
   public float floatVal;
   public int intVal;
   public typeAFill(string str1, float floatVal1, int intVal1)
   {
     str = str1;
     floatVal = floatVal1;
     intVal = intVal1;
   }
 }
}


Ок, а дальше что?
Код: c#
1.
2.
3.
4.
5.
BinaryFormater formatter = new BinaryFormater();
using (Stream stream = new Stream(bytes[])
{
 types newType = (types)formatter.Deserialize(stream);
}



Или как?
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777713
mozgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий Мух,
Читаю с PLC. Зашифрованы вообще не правильное слово, разве что "удобное". Я так понимаю, что это эдакая "унификация". Вместо того, чтоб постоянно слать/читать овермного переменных разных типов, их проще все собрать в unsignedByte массив и скопом отправить клиенту. А клиенту зная структуру можно их разобрать в удобоваримый вид. вот задачу клиента и пытаюсь реализовать.
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777716
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozgen,
Вы изобрели сериализацию?
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777717
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozgenесть некоторый "конфигурационный" файл, в котором описана структура.его руками пишут?
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777720
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozgenЯ так понимаю, что это эдакая "унификация". Вместо того, чтоб постоянно слать/читать овермного переменных разных типов, их проще все собрать в unsignedByte массив и скопом отправить клиенту. А клиенту зная структуру можно их разобрать в удобоваримый вид. вот задачу клиента и пытаюсь реализовать.бред какой то.
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777726
mozgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
Petro123 Вы изобрели сериализацию?
Не понял.
Petro123 его руками пишут?
Угу. Пишут. Один раз. когда-то давно.
Petro123 бред какой то.
Что есть, то и едим. =)
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777730
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozgen,

Конфигурации файл это хорошо,
Данные как записывают?
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777731
mozgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропил,
Куда записывают? в массив? - понятия не имею. По сути, у меня в ту логику и доступа-то нет...
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777732
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozgenPetro123Вы изобрели сериализацию?
Не понял.прочтите в википедии.
Это передача классов по проводам не в виде электронов, а в виде байт.
У вас же то же самое?
...
Рейтинг: 0 / 0
Разбираем массив байтов типа Object
    #39777733
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozgen,
Если конфиг не меняется (вам решать), то делаете из него не ваши классы, а руками читаете xml и читаете стрим с байтами.
Всё.
...
Рейтинг: 0 / 0
25 сообщений из 49, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Разбираем массив байтов типа Object
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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