#define bitRead(value, bit) (((value) >> (bit)) & 0x01)
int main()
{
// L'image d'un zéro, de taille 5x5
// 01110
// 10001
// 10001
// 10001
// 01110
//
// on regroupe pour en faire des bytes, soit:
// 01110100
// 01100011
// 00010111
// 00000000
//
// codepad ne prend pas en charge la notation binaire, donc je convertis en decimal:
uint8_t img[] = { 116, 99, 23, 0 };
// dimensions de l'image:
uint16_t img_w = 5;
uint16_t img_h = 5;
uint16_t img_sz = img_w * img_h;
// quelques variables:
uint8_t bit = 8;
uint16_t bits = 0;
uint16_t byte = 0;
// tant qu'il reste des bits à lire
while ( img_sz-- )
{
// on affiche la valeur du bit actuel:
printf( "%d", bitRead( img[byte], --bit ) );
// si on a lu tous les bits du byte actuel, on passe au byte suivant:
if ( bit == 0 )
{
bit = 8;
byte++;
}
// si on a lu tous les bits d'une ligne, on passe à la ligne suivante:
if ( ++bits == img_w )
{
bits = 0;
printf( "\n" );
}
}
}