25 / 24 / 17
Регистрация: 16.10.2009
Сообщений: 1,089
1

Как объявить массив, который является часть другого массива с определенной позиции

20.02.2019, 15:43. Показов 1763. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые Гуру!
Ниже сначала считывается заголовок сообщения , из него берется длина остального сообщения.
Как принимать вторую часть с 8-го элемента массива ?
Или можно ли часть исходного массива объявить как массив, для приема второй части сообщения

C#
1
2
3
4
5
6
7
8
9
            byte[] buffer = new byte[1000];
            using (var br = new BinaryReader(ns))
                while (true)
                {
 
                        buffer = (byte[])br.ReadBytes(7);//read 7 bytes to get  packet size
                        UInt16 packetSize = (UInt16)BitConverter.ToUInt16(buffer, 5);
                        buffer = br.BaseStream. ReadBytes(packetSize);//read packet   , вот здесь начать прием с 8 - го байта.
                  }
Спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.02.2019, 15:43
Ответы с готовыми решениями:

Скопировать часть строки с определенной позиции и определенной длины в другую строку
Ввести с клавиатуры строку. Скопировать часть строки с определенной позиции и определенной длины в...

Строка: Скопировать часть строки с определенной позиции и определенной длины в другую строку
Скопировать часть строки с определенной позиции и определенной длины в другую строку. Например:...

Подскажите, как объявить массив из другого класса?
У меня прописан массив в одном классе, а этот массив нужно использовать в форме2 для заполнения...

Как можно передать из функции или процедуры массив, который будет содержать ссылки на объекты из другого массива/коллекции ?
Доброго времени суток, буду благодарен, если поможете с решением следующей проблемы. Как можно...

5
Эксперт .NET
6433 / 3965 / 1583
Регистрация: 09.05.2015
Сообщений: 9,275
20.02.2019, 18:01 2
Почему не прочитать данные нормально? Если есть заголовок, то читайте его, причем сразу в простые типы типа int и т.д.
Например так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
using (var br = new BinaryReader(ns))
{
    while (true)
    {
        // read header fields...
        int packetSize = br.ReadInt32();
 
        // read data...
        byte[] data = br.ReadBytes(packetSize);
 
        // process data...
    }
}
0
1125 / 837 / 260
Регистрация: 30.04.2009
Сообщений: 3,506
20.02.2019, 23:00 3
Цитата Сообщение от АТерентьев Посмотреть сообщение
Как принимать вторую часть с 8-го элемента массива ?
C#
1
stream.Seek(7, SeekOrigin.Current);
0
25 / 24 / 17
Регистрация: 16.10.2009
Сообщений: 1,089
21.02.2019, 09:04  [ТС] 4
Ну так и сделал. Заголовок отдельно.
Но возникла мысль - можно ли принимать ридером с определенного элемента, скажем с позиции сразу за заголовком.
И второй - как сделать типа

subarray A Equivalent to buffer[7]

Но потом быстро переключился на нормальное решение - заголовок отдельно
0
Эксперт .NETАвтор FAQ
10384 / 5115 / 1824
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
21.02.2019, 10:39 5
Лучший ответ Сообщение было отмечено АТерентьев как решение

Решение

Цитата Сообщение от nicolas2008 Посмотреть сообщение
stream.Seek(7, SeekOrigin.Current);
Там подразумевается NetworkStream, Seek не поддерживается.
Цитата Сообщение от АТерентьев Посмотреть сообщение
Или можно ли часть исходного массива объявить как массив, для приема второй части сообщения
Можно делать так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
            using (var br = new BinaryReader(ns))
                while (true)
                {
                        var fullPacket = new List<byte>();
 
                        //read header
                        var buffer = br.ReadBytes(7);//read 7 bytes to get  packet size
                        var packetSize = (UInt16)BitConverter.ToUInt16(buffer, 5);
                        fullPacket.AddRange(buffer); //add header
 
                        //read body
                        buffer = br.ReadBytes(packetSize);//read packet's body
                        fullPacket.AddRange(buffer); //add body
 
                        // now fullPacket contains whole packet, include header
                        // you can transform it to array calling method .ToArray()
                  }
1
25 / 24 / 17
Регистрация: 16.10.2009
Сообщений: 1,089
21.02.2019, 10:52  [ТС] 6
Спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2019, 10:52
Помогаю со студенческими работами здесь

Подпрограмма: Как правильно объявить процедуру, аргументом которой является массив?
Добрый вечер, уважаемые пользователи форума! Можете сориентировать как правильно записывать...

Выделение памяти под массив, который заполняется из другого массива
Подскажите, как избавиться от нулей, которые образуются в конце одномерного массива после вычета...

Полиморфизм. Как в предке объявить статический массив, который можно будет использовать в наследниках?
Всем привет. Мне необходимо в классе предке объявить статический массив который можно будет...

Объявить массив? Запросто! Объявить массив массивов? А как это?
Доброго времени суток! Конечно, все знают, как объявить массив! int main () { int array; }

Как получить доступ к элементу массива, который сам является элементом массива
Здравствуйте! Использую Delphi 6 Есть такой тип type firstArray = array of single; Далее...

Доступ к объекту, который является свойством другого объекта
Здравствуйте, у меня следующая проблема. Есть класс Test_class. Одним из свойств этого класса...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru