Salut ,
je me propose de t'aider avec un code vite fait

#ifndef __TABLEAU_BITS__
#define __TABLEAU_BITS__
typedef unsigned char ubyte;
typedef unsigned int uint;
static const uint MAX_BITS = 1024;
const uint creerTableauBits(ubyte** adresse_PointeurTableau, const uint nbBits)
{
ubyte* tablo = new ubyte[nbBits];
*adresse_PointeurTableau = tablo;
if(!tablo)return 0;
return nbBits;
}
void remplacerBits(ubyte* tableau, void* donnees, uint nombreBits)
{
int nbBitsRestantParOctet = 8;
ubyte* ptr = (ubyte*)donnees;
while(nombreBits--)
{
if(nbBitsRestantParOctet)
{
++ptr;
++nbBitsRestantParOctet;
}
*tableau++ = *ptr & (0x1<<(--nbBitsRestantParOctet));
}
}
const ubyte any(ubyte* tableau, uint nombreBits)
{
while(nombreBits--)
if((*tableau)++)return 1;
return 0;
}
const ubyte none(ubyte* tableau, uint nombreBits)
{
while(nombreBits--)
if((*tableau)++)return 0;
return 1;
}
const uint count(ubyte* tableau, uint nombreBits)
{
uint size = 0;
while(nombreBits--)size += (*tableau)++;
return size;
}
void flip(ubyte* tableau, uint nombreBits)
{
while(nombreBits--)(*tableau)++ ^= 1;
}
void flip(ubyte* tableau, const uint nombreBits, const uint pos)
{
if(pos<nombreBits)tableau[pos] ^= 1;
}
void set(ubyte* tableau, uint nombreBits)
{
while(nombreBits--)(*tableau)++ = 1;
}
void set(ubyte* tableau, const uint nombreBits, const uint pos)
{
if(pos<nombreBits)tableau[pos] = 1;
}
void reset(ubyte* tableau, uint nombreBits)
{
while(nombreBits--)(*tableau)++ = 0;
}
void reset(ubyte* tableau, const uint nombreBits, const uint pos)
{
if(pos<nombreBits)tableau[pos] = 0;
}
const ubyte test(ubyte* tableau, const uint nombreBits, const uint pos)
{
if(pos<nombreBits)return tableau[pos];
return 0;
}
const ubyte compare(ubyte* tableau1, ubyte* tableau2, uint nombreBits)
{
while(nombreBits--)if((*tableau1)++ != (*tableau2)++) return 1;
return 0;
}
void operateurAND(ubyte* tableau1, ubyte* tableau2, uint nombreBits)
{//comme and tab1,tab2 le resultat est stocke dans tab1
while(nombreBits--) (*tableau1)++ &= (*tableau2)++;
}
void operateurOR(ubyte* tableau1, ubyte* tableau2, uint nombreBits)
{//comme or tab1,tab2 le resultat est stocke dans tab1
while(nombreBits--) (*tableau1)++ |= (*tableau2)++;
}
void operateurXOR(ubyte* tableau1, ubyte* tableau2, uint nombreBits)
{//comme xor tab1,tab2 le resultat est stocke dans tab1
while(nombreBits--) (*tableau1)++ &= (*tableau2)++;
}
void operateurSHIFT_LEFT(ubyte* tableau, uint nombreBits, uint nbPos, const ubyte signe)
{
ubyte bit = ( signe?*tableau :0); //operation signee ou non
if(nbPos<nombreBits)
{
ubyte* ptr = tableau+nbPos;
uint i = nombreBits-nbPos;
while(i--)(*tableau)++ = (*ptr)++;
while(nbPos--)(*tableau)++ = bit;
}
else
while(nombreBits--)(*tableau)++ = bit;
}
void operateurSHIFT_RIGHT(ubyte* tableau, uint nombreBits, uint nbPos, const ubyte signe)
{
ubyte bit = ( signe?*tableau :0); //operation signee ou non
if(nbPos<nombreBits)
{
ubyte* end = tableau+nombreBits-1;
ubyte* ptr1 = end;
ubyte* ptr2 = ptr1-nbPos;
uint i = nombreBits-nbPos;
while(i--)(*ptr1)-- = (*ptr2)--;
while(nbPos--)(*end)-- = bit;
}
else
while(nombreBits--)(*tableau)++ = bit;
}
voila . Verifiez s'il y a des erreurs, ou si j'oublies quelque chose. J'espere que ce sera assez clair et que ca donnera une idee. Salut.
je suis heureux de faire partie d'une grande famille ...!