【问题标题】:How to convert unix timestap to hexadecimal如何将unix时间戳转换为十六进制
【发布时间】:2020-05-16 19:00:53
【问题描述】:

我有这个 C 代码的 sn-p,我正试图将其转换为 Go:

#include <sys/time.h>
#include <sys/types.h>
#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>



int main()
{
    struct timeval started;
    int64_t ms;

    gettimeofday(&started, NULL);
    ms = (int64_t) started.tv_sec * 1000 + started.tv_usec / 1000;
    printf("Time: %011"PRIx64"\n", ms);

    return 0;
}

我发现了如何使用下面的 sn-p 将 unix 时间转换为毫秒:

package main

import (
    "fmt"
    "time"
)

func main() {
    fmt.Printf("Unix Time in ms: %d \n", time.Now().UnixNano() / 1000000)
}

但是,我很难将该数字转换为十六进制(这有点类似于我拥有的 C 代码的输出。)我确实找到了如何使用此 questions / answer 解码十六进制时间戳。谁能指出我正确的方向?

【问题讨论】:

  • 您阅读过fmt package 的文档吗?
  • 阅读numbers 上的维基百科页面。然后是time 上的那个。然后time(7)
  • 长度为 11 和零填充的小写十六进制表示为:%011x

标签: go time


【解决方案1】:

认为这应该是正确的解决方案:

package main

import (
    "fmt"
    "time"
)

func main() {
    unix_time_ms := 1589664726314
    fmt.Printf("Hex Unixtime in MS: %x ,should equal 1721f66bd2a\n", unix_time_ms)
}

在 C 中它应该匹配这个:

int main()
{
    int64_t unix_time_ms;
    unix_time_ms = 1589664726314;

    printf("Hex Unixtime in MS: %011"PRIx64"\n", unix_time_ms);

    return 0;
}

【讨论】:

    【解决方案2】:

    您可以使用'%XF' 在goalng 中打印十六进制。像下面这样

    package main
    
    import (
        "fmt"
        "time"
    )
    
    func main() {
        fmt.Printf("Unix Time in ms: %XF \n", time.Now().UnixNano() / 1000000)
    }
    

    游乐场链接here

    【讨论】:

    • 这个答案不正确。 FX 不要混用。您还忽略了长度、零填充和大小写。
    • @Marc 我添加了一个游乐场链接,它清楚地显示了FX 的混合。
    • 它们在运行的意义上混合在一起,但您最终会得到123234F,其中尾随的 F 不是数字的一部分,它只是您要打印的 F。
    猜你喜欢
    • 1970-01-01
    • 2021-10-15
    • 2015-03-12
    • 1970-01-01
    • 2016-02-21
    • 2018-02-27
    • 1970-01-01
    • 2011-07-09
    • 2015-09-13
    相关资源
    最近更新 更多