既存のバイト配列の先頭にバイトを追加する方法は?私の目標は、長さ3バイトから4バイトの配列を作成することです。そのため、先頭に00パディングを追加する必要があります。
それはできません。配列のサイズを変更することはできません。新しい配列を作成し、そこにデータをコピーする必要があります。
bArray = addByteToArray(bArray, newByte);
コード:
public byte[] addByteToArray(byte[] bArray, byte newByte)
{
byte[] newArray = new byte[bArray.Length + 1];
bArray.CopyTo(newArray, 1);
newArray[0] = newByte;
return newArray;
}
ここで多くの人が指摘しているように、C#の配列は、他のほとんどの一般的な言語と同様に、静的にサイズ変更されます。 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();
配列はサイズ変更できないため、より大きな新しい配列を割り当て、その先頭に新しいバイトを書き込み、Buffer.BlockCopyを使用して古い配列の内容を転送する必要があります。
毎回配列を再コピーしないようにするには、効率的ではありません
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
内部的には新しい配列を作成し、そこに値をコピーしますが、Array.Resize<byte>()
を使用してコードを読みやすくすることができます。また、達成しようとしているものに応じて、MemoryStream
クラスのチェックを検討することもできます。
シンプルで、次のコードを使用してください。
public void AppendSpecifiedBytes(ref byte[] dst, byte[] src)
{
// Get the starting length of dst
int i = dst.Length;
// Resize dst so it can hold the bytes in src
Array.Resize(ref dst, dst.Length + src.Length);
// For each element in src
for (int j = 0; j < src.Length; j++)
{
// Add the element to dst
dst[i] = src[j];
// Increment dst index
i++;
}
}
// Appends src byte to the dst array
public void AppendSpecifiedByte(ref byte[] dst, byte src)
{
// Resize dst so that it can hold src
Array.Resize(ref dst, dst.Length + 1);
// Add src to dst
dst[dst.Length - 1] = src;
}