gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:45:24 24 4
gpt4 key购买 nike

我想通过 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com