#c #boost #unit-conversion
#c #boost #преобразование единиц измерения
Вопрос:
РЕДАКТИРОВАТЬ: На самом деле, пока мы этим занимаемся, мне нужно сделать то же самое и для double
a — у меня есть что-то NNNDD в середине const char*
, где N — это целая часть, а D — десятичная (поэтому в 123.45 будет отображаться как const char*
до 12345). Я знаю, сколько целых чисел у меня будет, и я знаю, сколько десятичных знаков, так что это просто вопрос получения дроби из них.
У меня есть const char*
где-то в середине есть временная последовательность формата HHMMSSMMM (часы, минуты, секунды, миллисекунды). Я хотел бы создать ptime
из этого (я знаю, где начинается последовательность, поэтому у меня есть const char*
начало). Есть ли хороший, эффективный способ сделать это? Прямо сейчас я извлекаю каждое значение единицы измерения времени, сохраняю их в локальных переменных и вызываю ptime
конструктор со значением по умолчанию boost::gregorian::date()
и time_duration
of hours(hh) minutes(mm) seconds(ss) milliseconds(mmm)
… но это кажется немного неуклюжим, обходным путем. Разве я не должен иметь возможность просто передавать строку времени и не беспокоиться о дате?
Ответ №1:
Для двойников вставьте a . а затем преобразовать его в double.
const char * pDoubleString = ...;
const long DoubleStringLength = ...;
const long DoubleWholeCharCount = ...;
std::string DoubleAsString = std::string(pDoubleString, DoubleStringLength);
DoubleAsString.Insert(DoubleWholeCharCount, ".");
double DoubleValue = std::atof(DoubleAsString.c_str());
Комментарии:
1. Не
atof
ли это относительно дорогостоящая операция?2. Конечно, но я не вижу лучшего способа преобразовать
string
вdouble
.