以c ++获取epoc时间(隐式打印十六进制值)

时间:2018-06-10 19:01:22

标签: c++ time epoch

我的程序想用C ++打印epoc时间

如果我使用fprintf / printf命令打印,我会得到正确的输出

fprintf(stdout, "epoch time=%u\t", (unsigned)time(NULL));
printf("var epoch=%u\n",(unsigned)time(NULL));

输出---> 1528573149

但是当我使用C ++打印epoc时间时,输出以“hex”格式打印

cout<<"epoch time ="<< (unsigned)time(0);

输出----&GT; 5b1c2cdd

无法计算,十进制值如何隐式转换为十六进制值。

2 个答案:

答案 0 :(得分:1)

对我来说显示为十进制,但请尝试以下操作:

std::cout << std::dec << (unsigned)time(0);

或者您可以设置所需的格式标志:

std::cout.setf(std::ios_base::dec, std::ios_base::basefield);

答案 1 :(得分:1)

这是唯一的方式:

cout<<"epoch time ="<< (unsigned)time(0);
如果您之前已将std::cout设置为十六进制模式,

可以十六进制打印。

例如:

#include <ctime>              
#include <iostream>
#include <iomanip>
int main() {
    std::cout << "    decimal epoch time = " << time(0) << "\n";
    std::cout << std::hex;
    std::cout << "hexadecimal epoch time = " << time(0) << "\n";
}

我系统的输出是:

    decimal epoch time = 1528663129
hexadecimal epoch time = 5b1d8c59

在我看来,这是C ++ I / O最烦人的功能:要使用非默认格式打印单个项目,您必须更改输出流的状态,这会影响该流的所有后续输出。

如果您想以十六进制格式打印单个数据项(您可能在程序的早期版本中已经完成),您可以执行以下操作:

std::cout << "x = " << std::hex << x << std::dec << "\n";

这会将输出格式设置为十进制 - 无论之前是什么。可能有一种复杂的方法可以将它恢复到原来的状态。