首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能将日期和时间(加上一些注意事项)编码成12位?

是否有可能将日期和时间(加上一些注意事项)编码成12位?
EN

Stack Overflow用户
提问于 2022-10-06 18:18:03
回答 2查看 38关注 0票数 1

我有16块可供支配。其中,4位是头,不能被触摸。这只剩下12位了。我想将日期和时间数据编码到它们中。这些实质上是通过LPWAN发送的日志。

显然,不可能将适当的泛型日期和时间编码到其中。因为unix时间戳使用32位,而像紧凑时间格式这样的项目使用5个字节。

假设我们不需要这一年,因为这些信息可以从其他地方获得。我们也可以说秒的时间分辨率不一定是超精确的,所以我们可以将秒分割成30秒的间隔。如果我们简单地对数据进行编码,那么:

代码语言:javascript
复制
 4 bits month          (0-11)
 5 bits day            (0-31)
 5 bits hour           (0-23)
 6 bits minute         (0-59)
 1 bit  second         (0,30)
-----------------------------
21 bits

21位比32位好得多。但它仍然不是12。我可以从分钟中减去一点(四舍五入到最近的偶数分钟),并去掉秒,但这还剩下19位。离12点还有很远。

只是想知道这是否可能,以及是否有人有任何想法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-07 02:58:36

12位可以保存2^12 = 4096值,这对于一个任务来说是相当紧的。不确定在将日期时间压缩为4096个数字方面可以做多少工作。表示这些数据的空间太小。

有一些解决办法,没有一个能够实现你想要的,但也许你还是可以利用它:

  • 分开日期和时间。与发送日期/时间之间的某些算法不同,可以使用一位来指示正在发送的数据。这将留下11位来对日期或时间进行编码。你可以走得更远,也可以像这样分裂时间。然后,接收方可以重建访问先前接收的数据的完整日期时间。
  • 您可以有一个模式,其中一个日期包作为起点发送,随后的数据包从时代开始起以N秒间隔递增。
  • 从数据中完全删除日期时间,保存12位,但定期将其作为独立的心跳/日期时间包发送。
  • 您可以尝试压缩整个数据包,这样可以使用更多位来表示日期时间,并且仍然适合于较小的整体数据包大小。
  • 如果数据是以合理的固定间隔发送,您可以使用an interval of N seconds的循环计数器,如果您有很少的设备,并且可以跟踪它们何时开始传输,这可能有效。例如,一颗卫星在XYZ上发射,它每30秒发送一次计数器,我们接收到计数器值的100,计算日期我们使用简单的数学XYZ + 30*100 seconds
票数 2
EN

Stack Overflow用户

发布于 2022-10-07 04:00:20

不是的。除非你愿意代表不到一天半的时间。你只需计算4096个30秒的间隔,就会发现这将持续34小时零8分钟.4096个两分钟的间隔仅仅是四倍,或者五天,16小时,32分钟.仍然是一年中的一小部分。

如果您可以确保连续日志条目之间的差异很小,那么您可以将其填入12位。您将需要一个特殊的条目来给出一个初始日期,也许您可以在连续条目之间的差异太大时插入这样的条目。

@oleksii还有其他一些好建议。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73978397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档