【发布时间】:2021-05-12 20:01:06
【问题描述】:
我最近发现 5 月 15 日 02:09:25 Unix 时间将等于 1010101010101010101010101010101 二进制表示。
我想知道它是否是假的,所以我试图以二进制形式获取当前的 Unix 时间。我想出了一个这样的简单提示:
$ date +%s | xxd -b
我得到了这样的结果:
0000000: 00110001 00110100 00110011 00110001 00110100 00110110 143146
0000006: 00110010 00110100 00110100 00110010 00001010 2442.
总而言之,我得到了:
0011000100110100001100110011000100110100001101100011001000110100001101000011001000001010
但它显示的数字比我预期的要多多。所有其他变体也不令人满意,例如$ date "+%v %H:%M:%S" | xxd -b 或$ date | xxd -b。
我猜,这对date 和xxd 命令不会给我预期的结果。
您能否告诉我如何以二进制表示形式获得当前时间,以便在 5 月 15 日 02:09:25 获得 1010101010101010101010101010101?
更新:
好的,所以使用这个在线转换器 (http://www.mathsisfun.com/binary-decimal-hexadecimal-converter.html) 我能够得到合理的位数。 如何使用 bash 达到同样的效果?
【问题讨论】:
-
请注意,
date '+%s'生成一串以 ASCII 编码的十进制数字,xxd -b将每个数字的 ASCII 字符转换为二进制(0011后跟 4 位是 48 + digit )。 -
十六进制的 0x55555555。这意味着,截至 UTC 时间 2015 年 5 月 15 日星期五 02:09:25,当 32 位签名 @ 987654334@ 溢出。