увеличить ::posix_time::ptime из const char * «подстрока»

#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 .