在我的多线程程序中,我正在记录进程 ID 和线程 ID。线程id是使用pthread_self()函数生成的。当我以十六进制打印时,通常它有 12 个字符,其中前四个字符总是常见的,我不想记录它们。
C++ 中打印最后 8 个字符的最佳方法是什么,我尝试使用 boost::format 但不知道如何打印最后 8 个字符。
例如 这里打印十进制的进程 ID 和十六进制的线程 ID。
std::cout << boost::format("%5d|%8X") %getpid() %pthread_self()
我已经让它与下面的解决方案一起工作,但我不喜欢神奇的数字 10000000000
std::cout << boost::format("%5d|%8X") %getpid() %(pthread_self()%10000000000)
注意:为了简单起见,这里我使用了 std::cout。在我的应用程序中,我使用 boost::log 因此,如果有办法使用 boost log,这是首选。
这是一个示例:7f08 很常见,在调试中没有任何值(value)。
14833|7f084b7fe700
14833|7f084bfff700
14833|7f0850dec700
14833|7f08515ed700
14833|7f0851dee700
14833|7f08525ef700
14833|7f0852df0700
14833|7f08535f1700
最佳答案
你的魔法常数应该是十六进制:
pthread_self() & 0xffffffff
这允许底部 8 个十六进制数字中的位保持不变,但将较高的十六进制数字中的位设置为 0。然后它们应该被抑制,因为您没有指定前导 0 打印。
关于c++ - 记录线程 ID 的最后八个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5280642/