1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* convert(int n)
{
char *binaire = calloc(33, sizeof(char));
int i = 0;
int mask = 1;
char a;
for (i = 0;i < 32;i++)
{
a = '0';
if ((n&mask) == mask)
{
a = '1';
}
binaire[31 - i] = a;
mask = (mask << 1);
}
char *bin = strchr(binaire, '1');
binaire = bin - (bin - binaire) % 8;
return binaire;
}
#define N(a) (sizeof(a)/sizeof*(a))
int main()
{
struct test
{
int tst;
int n;
char const *s;
};
static struct test const a[] =
{
{
10, 0, "00000000"
},
{
11, 1, "00000001"
},
{
12, 0x7F, "01111111"
},
{
13, 0x80, "10000000"
},
{
14, 0xFF, "11111111"
},
{
15, -1, "11111111"
},
};
int err = 0;
size_t i;
for (i = 0; !err && i < N(a); i++)
{
struct test const *p = a + i;
char* s = convert(p->n);
if (s != NULL)
{
if (strcmp (s, p->s) != 0)
{
printf ("Error at test #%d '%s' / '%s'\n", p->tst, s, p->s);
err = 1;
}
free (s), s = NULL;
}
}
if (!err)
{
puts("P A S S E D");
}
return 0;
} |
Partager