#include <stdio.h>
//10 -> 2
char* dec_to_bin(char* b, int n) {
char* p, c, *t = b;
size_t i;
for(i = (size_t)n; i != 0; i >>= 1)
*b++ = (char)(i & 1) + '0';
*b = '\0';
// rev
for(--b, p = t; p < b; ++p, --b) {
c = *p;
*p = *b;
*b = c;
}
return t;
}
// 2 -> 10
int bin_to_dec(const char* s) {
const char* p;
int k, c, i, n = 0;
for(p = s; *p; ++p);
c = (p - s) - 1;
while(*s) {
if(*s++ == '1') {
i = 1;
for(k = 0; k < c; ++k)//pow(2, c)
i *= 2;
n += i;
}
--c;
}
return n;
}
int main(void) {
char buf[33];
int num = 12345;
printf("%s\n", dec_to_bin(buf, num));
printf("%d\n", bin_to_dec(buf));
return 0;
}