Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# для начинающих

Войти
Регистрация
Восстановить пароль
 
Jotun
59 / 60 / 25
Регистрация: 05.12.2014
Сообщений: 475
#1

Добавить к массиву его размер - C#

16.12.2015, 19:15. Просмотров 224. Ответов 6
Метки нет (Все метки)

Есть массив байт. К нему в начало нужно добавить 2 байта его размера.
Как бы покрасивей это сделать
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2015, 19:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Добавить к массиву его размер (C#):

По двумерному массиву массиву А получить одномерный массив В, присвоив его k-му элементу значение TRUE - C#
По двумерному массиву массиву А получить одномерный массив В, присвоив его k-му элементу значение TRUE, если выполнено указанное ниже...

Добавить двумерных массивов к 1 большому двумерному массиву - C#
есть 9 мелких массивов и 1 большой, который по длине равен суммам длин всех мелких. Все массивы двумерны, как мне скопировать элементы...

Как к байтовому массиву добавить другой байтовый массив? - C#
Добрый вечер. Нужна помощь. У меня есть 2 байтовых массива, string temp = "D ивет"; byte temp2 =...

Создание и доступ к массиву по его имени - C#
Не знаю, правильно ли я сформулировал заголовок темы, но суть такова. Необходимо запросить у пользователя строку (Console.ReadLine),...

Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции - C#
Подскажите, в чем ошибка? Выдает ошибку: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен...

В одномерном массиву найти минимальный элемент и переставить его со вторым отрицательным элементом - C#
для заданного одномерного массива найти минимальный элемент и переставить его со вторым отрицательным элементом на С#. я так написала но он...

6
Someone007
1538 / 1311 / 494
Регистрация: 09.05.2015
Сообщений: 3,432
Завершенные тесты: 1
16.12.2015, 19:24 #2
Создать новый массив нужного размера и скопировать в него старый.
C#
1
2
3
byte[] oldarr = new byte[10];
byte[] newarr = new byte[oldarr.Length + 2];
Array.Copy(oldarr, 0, newarr, 2, oldarr.Length);
0
Jotun
59 / 60 / 25
Регистрация: 05.12.2014
Сообщений: 475
16.12.2015, 19:25  [ТС] #3
ок, а как в 2 первые байта записать размер получившегося нового массива?
0
Someone007
1538 / 1311 / 494
Регистрация: 09.05.2015
Сообщений: 3,432
Завершенные тесты: 1
16.12.2015, 19:42 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C#
1
2
3
byte[] sizeBytes = BitConverter.GetBytes(newarr.Length);
newarr[0] = sizeBytes[0];
newarr[1] = sizeBytes[1];
В таком случае корректный размер будет только для массивов размером меньше 0xFFFF, т.к. в 2 байта большее число не поместить.
1
Jotun
59 / 60 / 25
Регистрация: 05.12.2014
Сообщений: 475
16.12.2015, 19:59  [ТС] #5
Цитата Сообщение от Someone007 Посмотреть сообщение
В таком случае корректный размер будет только для массивов размером меньше 0xFFFF, т.к. в 2 байта большее число не поместить.
Да, так и нужно.

sizeBytes.Length.ToString() - выдаёт 4

получается что массив состоит из 4-х элементов, так и надо?
0
Someone007
1538 / 1311 / 494
Регистрация: 09.05.2015
Сообщений: 3,432
Завершенные тесты: 1
16.12.2015, 20:09 #6
C#
1
2
3
4
5
6
7
byte[] oldarr = new byte[10];
byte[] newarr = new byte[oldarr.Length + 2];
Array.Copy(oldarr, 0, newarr, 2, oldarr.Length);
 
byte[] sizeBytes = BitConverter.GetBytes(oldarr.Length);
newarr[0] = sizeBytes[0];
newarr[1] = sizeBytes[1];
Тут наверно нужен был размер оригинального массива...

Еще вот так можно:
C#
1
2
3
byte[] arr = new byte[10];
byte[] size = BitConverter.GetBytes((ushort)arr.Length);
byte[] newArr = size.Concat(arr).ToArray();
Цитата Сообщение от Jotun Посмотреть сообщение
sizeBytes.Length.ToString() - выдаёт 4
получается что массив состоит из 4-х элементов, так и надо?
Вам абсолютно не важен размер массива sizeBytes. Да он состоит из 4 байт, т.к. int имеет такой размер.
0
Jotun
59 / 60 / 25
Регистрация: 05.12.2014
Сообщений: 475
16.12.2015, 20:12  [ТС] #7
или это потому что Length - integer и он его в 4 отдельных байта переводит?

Добавлено через 3 минуты
Цитата Сообщение от Someone007 Посмотреть сообщение
Тут наверно нужен был размер оригинального массива...
Нет, всё правильно, нужен был размер вместе с "размером"

спасибо
0
16.12.2015, 20:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2015, 20:12
Привет! Вот еще темы с ответами:

Максимизировать стороннее окно и получить его размер - C#
нужно максимизировать стороннее окно и получить его размер(хэндл содержится в переменно INTPTR hghandle)

Как заполнить массив, если не знаешь его размер? - C#
Допустим, есть массив: string massiv; Его нужно заполнить цифрами. Возможно ли обойтись без объявления размера массива: string...

Как изменить размер квадрата потянув за его ребро мышкой - C#
Всем добрый день. Пишу для своего движка небольшой 3д редактор уровней (базовый функционал) на подобии Valve Hammer. Так вот, в чем...

Удвоить размер файла, записав в конец все его исходные элементы - C#
Дан файл целых чисел. Удвоить его размер, записав в конец файла все его исходные элементы (в обратном порядке).


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru