#cpp
Подскажите, пожалуйста, как правильно преобразовать прямой код в десятичный? Прямой код лежит в векторе: std::vectorcode; Содержимое вектора: 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; Результат правильный. Но как-то длинно и, мне кажется, неэффективно.
Ответы
Ответ 1
Конечно, можно поиздеваться и сделать так: 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;
Комментариев нет:
Отправить комментарий