Запись байт в массив данных (C#)

178
17 марта 2019, 05:40

Допустим есть массив данных, произошла какая-то математическая операция над этими байтами и нам надо сохранить результат в в другой массив, тоже состоящий из байт. Я делаю это в цикле.

public static byte[] bitData;
public static byte[] testData = { };
// Математические операции
for (int i = 0; i < bitData.Length; i++) {
 testData[i] = (byte)(bitData[i]);
}

При выполнении данного кода возникает ошибка: "Индекс находился вне границ массива." Подскажите, как решить данную проблему, чтобы появилась возможность записать эти результаты в виде байт в другую переменную. Спасибо!

Answer 1

Массивы в C# не поддерживают изменение вместительности.

Строчку

byte[] testData = { };

компилятор разворачивает в

byte[] testData = new byte[0];

т. е. он создает массив вместительностью 0 элементов.

У вас есть, как минимум, 2 решения:

  • можно создать массив нужной вместительности перед тем как заполнять его

    testData = new byte[bitData.Length];
    for (int i = 0; i < bitData.Length; i++) {
        testData[i] = bitData[i];
    }
    
  • либо использовать готовую коллекцию, поддерживающую динамическое изменение вместительности

    var testData = new List<byte>();
    for (int i = 0; i < bitData.Length; i++) {
        testData.Add(bitData[i]);
    }
    

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

Answer 2

Для чего вы кастуете byte в byte (byte)(bitData[i]);?
По делу:
Для копирования данных из массива в массив используется (обычно) класс Array и метод Copy:

byte[] array = {1,2};
byte[] newArray = new byte[array.Length];
Array.Copy(array, newArray, array.Length);
READ ALSO
Работа с фото WPF

Работа с фото WPF

По задумке, получаем ссылку на фото, переносим его в папку с ресурсами, и вставляем фото в качестве заливки для EllipseОшибка:

243
Не запускается правильно loc контейнер Autofac

Не запускается правильно loc контейнер Autofac

Изучаю контейнеры, а именно AutofacВ моем примере у меня есть данные datatable, есть контейнер и два класса, реализующие один интерфейс, по логике...

217
Ожидание события c#

Ожидание события c#

Делаю свою консоль на c# и winforms, столкнулся с проблемой : для реализации методов Read и ReadLine надо подождать, пока пользователь введет данные(если...

174
Как обратиться элементу ключа в словаре?

Как обратиться элементу ключа в словаре?

У меня есть словарь, в котором хранятся всевозможные биграммы(a:b,b:c,a:b,a:c)В результативном словаре должны хранится ключ-значения

182