Comment ajouter un octet au début d'un tableau d'octets existant? Mon objectif est de créer un tableau de 3 octets de long à 4 octets. C'est pourquoi j'ai besoin d'ajouter 00 padding au début de celui-ci.
Tu ne peux pas faire ça. Il n'est pas possible de redimensionner un tableau. Vous devez créer un nouveau tableau et y copier les données:
bArray = addByteToArray(bArray, newByte);
code:
public byte[] addByteToArray(byte[] bArray, byte newByte)
{
byte[] newArray = new byte[bArray.Length + 1];
bArray.CopyTo(newArray, 1);
newArray[0] = newByte;
return newArray;
}
Comme beaucoup de personnes ici l'ont souligné, les tableaux en C #, ainsi que dans la plupart des autres langages courants, ont une taille statique. Si vous cherchez quelque chose de plus semblable aux tableaux de PHP, ce que je vais vous deviner, puisqu'il s'agit d'un langage populaire avec des tableaux de taille dynamique (et dactylographiés!), Vous devriez utiliser un tableau de tableaux:
var mahByteArray = new ArrayList<byte>();
Si vous avez un tableau d'octets provenant d'ailleurs, vous pouvez utiliser la fonction AddRange.
mahByteArray.AddRange(mahOldByteArray);
Ensuite, vous pouvez utiliser Add () et Insert () pour ajouter des éléments.
mahByteArray.Add(0x00); // Adds 0x00 to the end.
mahByteArray.Insert(0, 0xCA) // Adds 0xCA to the beginning.
Besoin de revenir dans un tableau? .ToArray () vous a couvert!
mahOldByteArray = mahByteArray.ToArray();
Les tableaux ne pouvant pas être redimensionnés, vous devez donc allouer un nouveau tableau plus grand, écrire le nouvel octet au début de celui-ci et utiliser Buffer.BlockCopy pour transférer le contenu de l'ancien tableau.
Pour éviter de recopier le tableau à chaque fois, ce qui n'est pas efficace
Qu'en est-il de l'utilisation de 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
Bien qu’il crée en interne un nouveau tableau et y copie des valeurs, vous pouvez utiliser Array.Resize<byte>()
pour obtenir du code plus lisible. Vous pouvez également envisager de vérifier la classe MemoryStream
en fonction de vos objectifs.
Simple, utilisez simplement le code ci-dessous, comme je le fais:
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;
}