【发布时间】:2018-04-28 16:30:05
【问题描述】:
任务是使用 32 位系统向网络发送代表自 UNIX 纪元以来毫秒数的 little-endian 字节。
数字 1510747673476 代表当前日期,即 2017 年 11 月 15 日。在 32 位系统中,系统无法想到这个数字。自 UNIX 时代以来,它也没有毫秒的来源。但它确实有秒数的来源。我们可以生成毫秒始终为零的 48 位数字。
说 y = 1510747673 是自当前日期的 UNIX 纪元以来的秒数。有没有办法改为格式化 1510747673 * 10^3 ?这意味着我会得到数字 1510747673 的字节,并以某种方式发现我需要另外两个字节来组成 1510747673 * 10^3 的小端字节?就是这个问题。
欢迎提出更好的问题。目标是以毫秒为单位传递当前日期的 6 个字节。接收端期望它是 little-endian 和 48 位大小。
【问题讨论】:
-
你在说什么编程语言?
-
我们正在谈论 Lua。是否相关?
-
"32-bit" 只是字长。这不是计算机的限制。
-
通常是的——编程语言通常会抽象出处理大于硬件本机大小的类型的问题。我不熟悉 Lua,但我想它有一些方法可以处理“大”整数类型。
-
我明白了。我有一个可以格式化 32 位整数的库。我发现我可以处理更大的数字。似乎这个 Lua 系统对整数使用双精度数据类型。例如,设置 y = 1510747673476 并将其打印出来得到 1.51075e+12。我不确定这只是打印还是真的丢失了数字的“673476”部分。但这条路线对我来说是完全未知的领域。所以我一直在使用我拥有的库来格式化最多 32 位的数字——它总是给我 4 个字节来处理它格式化的任何数字。
标签: 32bit-64bit unix-timestamp