В C, как я могу использовать функцию printf() для сохранения строки?

Я пытаюсь представлять bit16 представление числа (представление с плавающей запятой) с использованием unsigned целые числа. Поле дроби здесь отклоняется от стандарта 10 и составляет 8 битов, то есть поле экспоненты равно 7 битам, а знак равен 1 биту.

У меня есть следующий код:

bit16 float_16(bit16 sign, bit16 exp, bit16 frac) {

 //make the sign the number before binary point, make the fraction binary.
 //concatenate the sign then exponent then fraction
 //

 bit16 result;
 int theExponent;

 theExponent = exp + 63; // bias = 2^(7-1) + 1 = 2^6 + 1 = 63

 //printf("%d",sign);
 int c, k;

 for(c = 6; c > 0; c--)
 {
     k = theExponent >> c;

     if( k & 1)
         printf("1");
     else
         printf("0");
 }

 for(c = 7; c >= 0; c--)
 {
     k = frac >> c;

     if( k & 1)
         printf("1");
     else
         printf("0");
 }



 //return result;

}

Мое мышление "воссоздать" 16 bit Последовательность из этих полей состоит в том, чтобы объединить их вместе, но если я хочу использовать их в дальнейшем приложении, я не могу это сделать. Есть ли способ сохранить конечный результат после того, как все было напечатано (16-bit последовательность) в переменную, которая может быть представлена ​​в виде целого числа без знака? Или есть более оптимальный способ сделать эту процедуру?

1 ответ

В то время как printf в этом случае работать не будет (вы не можете "сохранить" его результат), вы можете использовать sprintf,

int sprintf ( char * output_str, const char * format, ... );

sprintf записывает отформатированные данные в строку

Составляет строку с тем же текстом, который будет напечатан, если формат был использован на printf, но вместо того, чтобы печататься (или отображаться на консоли), содержимое сохраняется в виде строки C в буфере, указанном output_str,

Размер буфера должен быть достаточно большим, чтобы вместить всю результирующую строку. См. Переполнение буфера.

Завершающий нулевой символ (\0) будет автоматически добавлен в конце вашего output_str,

От output_str к целочисленной переменной

Вы можете использовать atoi Функция для этого. Вы можете получить свой ответ в целочисленной переменной, например:

int i = atoi (output_str);
Другие вопросы по тегам