2016-01-28 6 views
1

Я пытаюсь представить представление числа (представление с плавающей запятой) bit16 с целыми числами unsigned. Поле фракции здесь отклоняется от стандарта 10 и составляет 8 бит - подразумевая, что поле экспоненты составляет 7 бит, а знак - 1 бит.В C, как я могу использовать функцию printf() для «сохранения» строки?

код у меня выглядит следующим образом:

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 sequence) в переменную, которая затем может быть представлена ​​как целое число без знака? Или есть более оптимальный способ сделать эту процедуру?

+0

Что такое 'бит16'? –

+1

Вы не можете сохранить результат printf. Вы можете использовать 'sprintf', но в этом случае, вероятно, проще просто установить отдельные символы в массиве char. –

+0

@ M.M, это typedef unsigned int. – helpisgood

ответ

1

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

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

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

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

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

Окончательный символ нулевой последовательности (\0) будет автоматически добавлен в конце вашего output_str.

От output_str до целого числа переменной

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

int i = atoi (output_str); 
+0

двоичный код не отображался должным образом с помощью этого метода. Любые идеи для другой стратегии? – helpisgood

+0

Что именно произошло? Было ли какое-то сообщение об ошибке? –

+0

в коде, который я предоставил, он не будет печатать двоичный файл для части мантиссы/фракции должным образом. Я пытался часами и не мог заставить его работать. – helpisgood

 Смежные вопросы

  • Нет связанных вопросов^_^