Вопрос: а что нужно на выходе: char[32]?
Если да, то например:
char* int2char(int a)
{
static char str[33];
int i=32;
char *p;
str[32]=0;
memset(str,'0',32);
p = &str[31];
while(i)
{ if( a & 1 ) *p='1';
a >>= 1;
p--;
i--;
}
return str;
}
Вроде не ошибся...
Еще более быстрый вариант -- табличный способ. Сделать таблицу для 1 байта, и int делать в 4 итерации.
char* int2char(int a)
{
static char str[33];
const char table[9][256] =
{ "00000000","00000001","00000010", "00000011",
"00000100","00000101","00000110", ... "11111111" };
str[32]=0;
memcpy( &str[24], &table[0][ a & 0xFF ], 8 );
a >>= 8;
memcpy( &str[16], &table[0][ a & 0xFF ], 8 );
a >>= 8;
memcpy( &str[8], &table[0][ a & 0xFF ] , 8);
a >>= 8;
memcpy( &str[24], &table[0][ a ], 8 );
return str;
}
Здесь правда memcpy наверное все время сожрет. Так что еще не понятно какой способ быстрее.
Таблицу набивать, естественно, не руками, а специальной утилиткой, использующей первый метод.
По поводу float, думаю, тут нужно что-то типа:
float f;
int i;
i = *((int*)(&f));
int2char(i);