Страницы

Поиск по вопросам

четверг, 14 февраля 2019 г.

Преобразование прямого кода в десятичный

Подскажите, пожалуйста, как правильно преобразовать прямой код в десятичный?
Прямой код лежит в векторе:
std::vector code;
Содержимое вектора: 0x90 0xa8 0x02. При этом code[0] - десятичная часть, а в code[2] и code[1] целая. Причем старший бит в code[2] обозначает знак числа.
Я реализовал так:
// calculate int8_t pm = 1; if (result[2] & 1<<7){ pm=-1; result[2] ^= 1<<7; } y = (result[2]*256 + result[1] + result[0]/256.0) * pm;
Результат правильный. Но как-то длинно и, мне кажется, неэффективно.


Ответ

Конечно, можно поиздеваться и сделать так:
double dres(const vector&result) { struct Data { unsigned long i: 23; int sign : 1; }; Data *d = (Data*)&result[0]; return double(d->i)/256 *(d->sign ? -1 : 1); }
Ну, принцип вы поняли?
У вас мне очень не нравится то, что вы меняете result[2]
result[2] ^= 1<<7;

Комментариев нет:

Отправить комментарий