#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 value = 0;
uint8_t bit = 0;
uint16_t bits = 0;
uint16_t byte = 0;
// tant qu'il reste des bits à lire
while ( img_sz-- )
{
// si c'est la première itération, on lit le premier byte,
// ou, si on a lu tous les bits du byte actuel, on passe au byte suivant:
if ( bit == 0 )
{
bit = 8;
//value = fram.read8( framD++ )
value = img[byte++];
}
// on affiche la valeur du bit actuel:
printf( "%d", bitRead( value, --bit ) );
// si on a lu tous les bits d'une ligne, on passe à la ligne suivante:
if ( ++bits == img_w )
{
bits = 0;
printf( "\n" );
}
}
}