Il y a quelque i codé ces deux fonctions, la première on déplace un byte [] un montant spécifié de bits vers la gauche, la seconde fait de même vers la droite:
Maj gauche:
public byte[] ShiftLeft(byte[] value, int bitcount)
{
byte[] temp = new byte[value.Length];
if (bitcount >= 8)
{
Array.Copy(value, bitcount/8, temp, 0, temp.Length - (bitcount/8));
}
else
{
Array.Copy(value, temp, temp.Length);
}
if (bitcount % 8 != 0)
{
for (int i = 0; i < temp.Length; i++)
{
temp[i] <<= bitcount % 8;
if (i < temp.Length - 1)
{
temp[i] |= (byte)(temp[i + 1] >> 8 - bitcount % 8);
}
}
}
return temp;
}
décalage à droite:
public byte[] ShiftRight(byte[] value, int bitcount)
{
byte[] temp = new byte[value.Length];
if (bitcount >= 8)
{
Array.Copy(value, 0, temp, bitcount/8, temp.Length - (bitcount/8));
}
else
{
Array.Copy(value, temp, temp.Length);
}
if (bitcount % 8 != 0)
{
for (int i = temp.Length - 1; i >= 0; i--)
{
temp[i] >>= bitcount % 8;
if (i > 0)
{
temp[i] |= (byte)(temp[i - 1] << 8 - bitcount % 8);
}
}
}
return temp;
}
Si vous avez besoin de plus amples explications s'il vous plaît commenter cela, je puis éditer mon message pour la clarification ...
merci, j'ai aimé cette approche, problème est que BitArray constructeur a changé l'ordre de l'Endian par octet dont la valeur était alors erronée une fois la méthode terminée, id besoin d'inverser l'ordre des bits par octet avant d'instancier le tableau de bits les byes – Bobby