c - 如何将 C-printf 字符串格式化为等于 bash-printf 字符串

标签 c bash printf

我想通过 CAN 接口(interface)发送时间戳以供分析。 因此我使用了 Linux-can/can-utils 中的 cansend。在 Linux shell 上,我可以通过以下方式发送当前时间 可以发送 can0 123#$(printf "%x"$(date +%s%N))

date +%s%N 给我输出 1566378614461677537(19 位数字),用 printf "%X"$(date +%s%N) 给我所需的输出 B15CE567BA9D338E(这是 8 字节 CAN 帧) 然后用“cansend”发送。另一方面,在我的 C 代码中

    struct timeval start; 
    gettimeofday(&start, NULL);
    printf("%.0f%.0f\n", (double)( start.tv_sec) , (double)(start.tv_usec)); //for debug
    printf("%x%.0X.%0X%X\n", (double)(start.tv_sec), (double)(start.tv_usec)); //desired output 

给我输出 1566382713648209 (这是没有纳米的 16 位数字,但对我来说足够准确)但如果我使用 printf("%x%.0X%0X%X\n", (double)(start.tv_sec), (double)(start.tv_usec)) 然后输出是 09E40000041D757460。 如何获得所需的输出 B15CE567BA9D338E

最佳答案

只需将其转换为具有纳秒分辨率的十六进制值...

#include <stdio.h>
#include <time.h>

int main() {
    struct timespec tp;
    clock_gettime(CLOCK_REALTIME, &tp);
    unsigned long long tmp = tp.tv_sec * 1000ull * 1000 * 1000 + tp.tv_nsec;
    printf("%llX", tmp);
}

不要使用 gettimeofday,它自 POSIX 2008 以来已被弃用。

关于c - 如何将 C-printf 字符串格式化为等于 bash-printf 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57589781/

相关文章:

从 MEX 调用 MATLAB 函数 "imread"

c - 提交和锁定虚拟内存有什么区别?

c - 关于C中的数组

bash - 如何打印$@

git - 检查 git repo 中是否存在分支而不进行克隆

Java:Printf(%.2f,arg) 显示 f$ff 而不是 f.ff。什么可能导致这种情况?

c++ - 使用可变大小的参数 vector 格式化字符串(例如,将参数 vector 传递给 std::snprintf)

c - 字符串分配给指针字符串数组和动态内存的问题

linux - 如何在解析数据之前替换字符

c - 使用 c 格式化输出