Как добавить байт в начало существующего массива байтов? Моя цель - сделать массив размером 3 байта до 4 байтов. Поэтому, почему мне нужно добавить отступ в начале его.
С# как добавить байт в байтовый массив
Ответ 1
Вы не можете этого сделать. Невозможно изменить размер массива. Вы должны создать новый массив и скопировать данные на него:
byte[] newArray = new byte[theArray.Length + 1];
theArray.CopyTo(newArray, 1);
newArray[0] = theNewByte;
theArray = newArray;
Ответ 2
Как указывали многие люди, массивы на С#, а также на большинстве других распространенных языков, статичны. Если вы ищете что-то большее, чем массивы PHP, о которых я просто догадаюсь, так как это популярный язык с массивами с динамическим размером (и напечатанными!), Вы должны использовать ArrayList:
var mahByteArray = new ArrayList<byte>();
Если у вас есть массив байтов из другого места, вы можете использовать функцию AddRange.
mahByteArray.AddRange(mahOldByteArray);
Затем вы можете использовать Add() и Insert() для добавления элементов.
mahByteArray.Add(0x00); // Adds 0x00 to the end.
mahByteArray.Insert(0, 0xCA) // Adds 0xCA to the beginning.
Нужно ли вернуть его в массив?.ToArray() вы покрыли!
mahOldByteArray = mahByteArray.ToArray();
Ответ 3
Массивы не могут быть изменены, поэтому вам нужно allocte новый массив, который больше, напишите новый байт в начале его и используйте Buffer.BlockCopy для переноса содержимого старого массива через.
Ответ 4
Чтобы предотвратить повторный вызов массива каждый раз, когда это не эффективно
Как насчет использования Stack
csharp> var i = new Stack<byte>();
csharp> i.Push(1);
csharp> i.Push(2);
csharp> i.Push(3);
csharp> i; { 3, 2, 1 }
csharp> foreach(var x in i) {
> Console.WriteLine(x);
> }
3 2 1
Ответ 5
Хотя внутри он создает новый массив и копирует в него значения, вы можете использовать Array.Resize<byte>()
для получения более читаемого кода. Также вы можете рассмотреть возможность проверки класса MemoryStream
в зависимости от того, чего вы пытаетесь достичь.