Advertisement
Guest User

Untitled

a guest
Dec 15th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.59 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main (void) {
  6.  
  7.   //Кропаем строку под вывод число типа float в двоичном нужного размера
  8.   char* p;
  9.   if(!(p= (char*)(malloc (sizeof(float)* 8+ 1))))
  10.    printf ("всё плохо");
  11.   //выделили строку
  12.  
  13.  
  14.   //+++++++++++++++++++++++++++++++++++++++++++
  15.  
  16.  
  17.   //прикол в т том, что я умею перводить в двоичную систему только числа int
  18.   //ну или char на крайняк
  19.   //но float не int, поэтому я щас сделаю буфер, куда тупо побайтно
  20.   //перегоню float
  21.   float f = 12.345;
  22.   char* p_;
  23.   if(!(p_= (char*)(malloc (sizeof(float)))))
  24.    printf ("всё плохо");
  25.   memmove (p_, &f, sizeof(float));
  26.   //теперь в p_ просто набор нужных байт, который я туда перегнал,
  27.   // с ним можно работать уже
  28.   //кто может обойтись без этого буфера,  пусть покажет как
  29.  
  30.  
  31.   //+++++++++++++++++++++++++++++++++++++++++++
  32.  
  33.  
  34.   //теперь побайтно с буфером работаем
  35.   for (int i= 0; i< (int)sizeof(float); i++) {
  36.    
  37.    //именно (unsigned char) и никак иначе
  38.    //каждый байт последжовательности перегоним сюда
  39.    unsigned char temp_= (unsigned char)p_[i];
  40.    
  41.  
  42.    //Это вот специальный буферик, куда мы будем запихивать двоичное представление
  43.    //каждого байта
  44.    char temp__ [8];
  45.  
  46.  
  47.    //тут есть несколько способов как переводить int
  48.    //в двоичную систему, я выбрал жёсткий
  49.    //повторюсь: фактически, мы хоть и работаем с int
  50.    //но работаем с ОДНИМ БАЙТОМ
  51.    //а состальные байты- нулевые
  52.    itoa (temp_, temp__, 2);
  53.    
  54.    //очередная грязь, которая нас поджидает: itoa убирает лидирующие ноли;
  55.    int tem= strlen(temp__);
  56.    memmove (&temp__ [8- strlen(temp__)], temp__,strlen(temp__));
  57.    memset  (temp__, '0', 8- tem);
  58.  
  59.  
  60.    //теперь перегоним содержимое буферика куда надо:
  61.    memmove (&p[8* i], temp__, 8);        
  62.    
  63.   }
  64.   p [sizeof(float)* 8]= 0;
  65.   printf ("%s\n", p);
  66.  
  67.  
  68.   getchar ();
  69.   return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement