首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++将"HH:MM:SS.fraction“转换为int64_t

C++将"HH:MM:SS.fraction“转换为int64_t
EN

Stack Overflow用户
提问于 2012-12-25 02:25:07
回答 2查看 1.2K关注 0票数 0

有没有一种通用的、方便的、跨平台的方法来转换“HH:MM:SS”格式的字符串?在C或C++中转换为(时间增量)数值类型,反之亦然?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-25 02:36:30

对于这个特定的问题,strptime是最好的可移植性。它不在C标准库中(即使它已经被添加,因为C89、C99和C2011的可移植性并不比POSIX更好(非常感谢微软)),但是它足够广泛,我的建议是编写代码就像它是通用的一样,然后检测到它在构建系统中的缺失并注入一个替代品。你可以在这里获得一个获得BSD许可的替代品:http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/time/strptime.c?rev=HEAD (可能需要可移植性调整)

票数 1
EN

Stack Overflow用户

发布于 2012-12-25 03:18:18

这并不是很难(我假设你的时间是机器生成的,而不是手写的,所以我们可以相信它是“正确的”-否则,我们必须添加大量的"is this value in range“检查)。我还将假设分数始终是相同的位数。

代码语言:javascript
运行
复制
int64_t parsetime(char *str)
{
    int hh, mm, ss, fract;
    int64_t t;

    if (sscanf(str, "%d:%d:%d.%d", &hh, &mm, &ss, &fract) != 4)
    {
        printf("Badly formed time %s\n", str);
        return -1;
    }

    // 1000000 assumes there are 6 digits in fract, and we want microseconds.
    t = ((hh * 60)  + mm *60) + s) * 1000000 + fract;

    return t;
}

你可以做一些类似的事情,使用double%d:%d:%lf作为格式字符串,然后乘以相关的乘数,得到整数形式的分数(例如,1000代表毫秒,1000000代表微秒,100000000代表纳秒,等等)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14024571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档