#include <iostream> using std::cout; using std::endl; // функция преобразует четыре бита в их строковое представление void numToBin( char num, char *res ) { switch( num ) { case 0x0: strcat( res, "0000" );break; case 0x01: strcat( res, "0001" );break; case 0x02: strcat( res, "0010" );break; case 0x03: strcat( res, "0011" );break; case 0x04: strcat( res, "0100" );break; case 0x05: strcat( res, "0101" );break; case 0x06: strcat( res, "0110" );break; case 0x07: strcat( res, "0111" );break; case 0x08: strcat( res, "1000" );break; case 0x09: strcat( res, "1001" );break; case 0x0A: strcat( res, "1010" );break; case 0x0B: strcat( res, "1011" );break; case 0x0C: strcat( res, "1100" );break; case 0x0D: strcat( res, "1101" );break; case 0x0E: strcat( res, "1110" );break; case 0x0F: strcat( res, "1111" );break; } } // функция получает из числа его двоичное представление void getBinary( void * value, size_t valueSize, char * result, size_t resultSize ) { if ( resultSize < valueSize * 8 + 1 ) { return; } char *revers = new char[valueSize]; if ( NULL == revers ) { return; } char *ptr = (char*)value; for ( int i = valueSize-1; i >= 0; --i ) { revers[i] = *ptr; ptr++; } for ( size_t i = 0, j = 0; i < valueSize; ++i, j+=4 ) { numToBin( (revers[i]>>4)&0x0F, result+j ); numToBin( revers[i]&0x0F, result+j ); } delete revers; revers = NULL; } int main( ) { float d = 100; char res[100] = { 0 }; getBinary( &d, sizeof d, res, sizeof res ); cout << res << endl; return (EXIT_SUCCESS); } |