【问题标题】:boost::posix_time::ptime from const char* "substring"boost::posix_time::ptime 来自 const char* "substring"
【发布时间】:2014-07-02 17:40:06
【问题描述】:

编辑:实际上,当我们这样做时,我也需要为 double 做同样的事情 - 我在 const char* 的中间有一些 NNNDD,其中N 是整个部分,D 是小数(因此在 123.45 中将显示为 const char* 到 12345)。我知道我将有多少个整数,我知道有多少个小数,所以这只是从它们中取出一个分数的问题。

我在中间某处有一个const char*,有一个格式为 HHMMSSMMM(小时、分钟、秒、毫秒)的时间序列。我想从中创建一个ptime(我知道序列从哪里开始,所以我有一个const char* 开始)。有没有一种好的、有效的方法来做到这一点?现在我正在提取每个时间单位值,将它们存储在局部变量中,并使用默认的boost::gregorian::date() 和time_duration 的hours(hh) + minutes(mm) + seconds(ss) + milliseconds(mmm) 调用ptime 构造函数......但感觉有点笨拙,迂回。我不应该只传递一个时间字符串而不用担心日期吗?

【问题讨论】:

    标签: c++ boost unit-conversion


    【解决方案1】:

    对于双打,插入一个 .然后把它读成双精度。

     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());
    

    【讨论】:

    • atof 不是一个相对昂贵的操作吗?
    • 当然可以,但我没有看到更好的方法将 string 转换为 double。
    猜你喜欢
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 2010-11-13
    • 2016-01-30
    相关资源
    最近更新 更多