В 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);