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
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
unsigned char binary_to_ul(char const *bin, int *error);
int main(void)
{
int err = 0;
int ret = EXIT_SUCCESS;
int c = (int) binary_to_ul("01100110", &err);
if (err == 0)
{
printf("Le caractère correspondant est: %c (%d)\n", c, c);
}
else
{
fprintf(stderr, "Erreur: %d\n", err);
ret = EXIT_FAILURE;
}
return ret;
}
unsigned char binary_to_ul(char const *bin, int *error)
{
unsigned long ret = 0;
int err = 0;
if (bin != NULL)
{
size_t const max_bits = sizeof ret * CHAR_BIT;
if (strlen(bin) <= max_bits)
{
char const *p = bin;
for (p = bin; *p != 0; p++)
{
switch (*p)
{
case '1':
ret = (ret << 1) + 1;
break;
case '0':
ret = (ret << 1);
break;
default:
err = 3;
break;
}
}
}
else
{
/* Erreur: la chaine est trop longue*/
err = 2;
}
}
else
{
/* Erreur: argument invalide*/
err = 1;
}
if (error != NULL)
{
*error = err;
}
return ret;
} |
Partager