@mr_firuzinho

Как на СИ преобразовать вводимое дробное или целое число в внутренний формат(спт/сфт) и вывести его?

Здравствуйте, как мне преобразовать на си число(дробное. целое) в внутренний формат(спт/сфт). Мне нужно реализовать известный алгоритм преобразования, но пока у меня не получается. Я накидал шаблон, но дальше пока не могу двигаться. Спасибо большое.
#include <stdio.h>
#include <string.h>
.	.	.
 unsigned char representation[sizeof(float)];

 float x = 76.625;

 memcpy(representation, &x, sizeof(x));

 for (int i = sizeof(x) - 1; i >= 0; i--) {
 unsigned char byteRep = representation[i]; //0..255
 //перевести это число в 16-сс и вывести, можно по 2-м
цифрам

 }
  • Вопрос задан
  • 1719 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
как мне преобразовать на си число(дробное. целое) в внутренний формат(спт/сфт)

Что такое спт/сфт? С Плавающей Точкой -> С Фиксированной Точкой?
Просто умножить на 2^(количество битов в дробной части представления с фиксированной точкой) и взять целую часть от результата. Например, для представления с фиксированной точкой 16.16:
float x = 76.625;
uint32_t fix = (int32_t)(x * (1 << 16));

Вывести его проще всего приведя к типу float и поделив на 2 ^ (количество битов в дробной части представления с фиксированной точкой):
printf("%f\n", (float)fix / (1 << 16));
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
Не понял то такое спт/сфт.
Но в функциях printf есть спецификаторы для вывода в 16-сс.
Если вручную, то я бы завел массив из 16 элементов char, куда записал шестнадцатиричные цифры, потом берете половину байта как индекс массива и строите строку из элементов массива.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы