c++ - timeval 到字符串(在两者之间转换)

标签 c++ string time casting timeval

我正在尝试将这两个组件从时间结构中拉出并将它们放入字符串中。

我运气不太好。我尝试先将其转换为长整数,然后再转换为字符串。我需要最有效的方法来执行此操作。

有什么想法吗?我不想首先转换为另一个数据结构(本地时间等)。我需要原始状态下的秒和微秒。

编辑:我知道 stringstream 是这里的一个选项——我只是不确定它的效率如何。在这里每一微秒都很重要,所以我正在寻找最快的实现。

最佳答案

Boost 的 lexical_cast应该相当快。

编辑:
让我详细说明。下面是它的用法示例:

std::string strSeconds = lexical_cast<std::string>(time.tv_sec);
std::string strMicroSec = lexical_cast<std::string>(time.tv_usec);

对于更复杂的字符串格式,Boost 文档推荐基本的 std::stringstream。像这样的东西:

std::stringstream ss;
ss << time.tv_sec << " seconds, " << (time.tv_usec/1000L) << " milliseconds";
return ss.str();

相当快、可读、安全和标准。通过使用 cstdio header 中的 sprintf,您可能会获得更快的速度。 (如果可用,最好是 sprintf_s)printf 中没有对 long 变量的明确支持,但如今在 32 位以上的机器上,它们通常大小相同,因此您可以使用 %d 说明符来处理它们:

std::string tvtostr(timeval time) {
    // unless corrupted, the number of microseconds is always less than 1 second
    assert(time.tv_sec >= 0 && time.tv_usec >= 0 && time.tv_usec < 1000000000L);
    static_assert(sizeof(long)==4 && sizeof(int)==sizeof(long), 
        "assuming 32 bit ints and longs" ); 

    // space for one unbounded positive long, one long from 0 to 999,
    // the string literal below, and a '\0' string terminator
    boost::array<CHAR, 10+3+23+1> buffer; 

    sprintf_s(buffer.data(), buffer.size(), "%d seconds, %d milliseconds", 
        time.tv_sec, (time.tv_usec/1000L) );

    return buffer.data();
}

关于c++ - timeval 到字符串(在两者之间转换),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3106740/

相关文章:

python - 合并列数据框

python 字符串匹配时间复杂度

c++ - 未聚焦时 Direct2D 窗口呈黑色

c++ - Poco - 安全地使用 removeObserver

c++ - Zeromq:在 Windows 上连接 31. 服务器后,PULL/PUSH 客户端崩溃

C++ winform 组合框选择值

php - 不考虑 PHP 顺序的字符串比较

php - 使用字符串 - PHP

c# - c#中的字符串组合

MySQL - 按十五分钟间隔对时间范围进行分组