将时间戳编码为最少的字符
Posted
技术标签:
【中文标题】将时间戳编码为最少的字符【英文标题】:Encoding a timestamp to the least amount of characters 【发布时间】:2014-07-21 04:59:53 【问题描述】:我需要创建一个条形码,其中包含除其他数据外的时间戳,包括年、月、日、小时和分钟。鉴于代码长度有限,我需要此时间戳尽可能短。
我的想法是获取 UNIX 时间戳,除以 60(删除“秒”数据),然后将其转换为十六进制。示例:
当前时间戳:1401546126 丢秒:1401546126 / 60 = 23359102 转换为十六进制:0x1646E7E 打印到条形码的字符串:1646E7E这样我可以从 10 个字符变为 7 个字符。我还考虑过使用不同的基数,例如基数 36,它只能产生 5 个字符。
有没有更好的方法来做到这一点,这可能会导致条形码中的字符更少?除了转换到更高的基数之外,还有其他方法可以解决这个问题吗?
【问题讨论】:
用什么语言?这是一个不错的问题,但这是一个编程网站,因此您需要为您将使用的语言提供一些上下文。 嗯,任何语言。这是一个编程逻辑的问题。我正在尝试找到一种算法来编码时间戳,而不是特定语言的实现。 我明白你的意思。我可能会使用不止一种语言,所以我添加了一个C
标签,因为这些语言是C
派生的。
你在考虑什么样的条码编码方案?许多商业标准(即:五中二编码,en.wikipedia.org/wiki/Two-out-of-five_code)仅表示十进制数字[0-9]
和一些额外的符号。您也可以使用代码 39 或代码 93 编码,但这些通常涉及固定宽度的数字表示,因此除非您超出限制,否则保存数字毫无意义。您能告诉我们您将使用哪种 2D(离散或连续)编码吗? en.wikipedia.org/wiki/Barcode
值必须是唯一的多长时间?如果它在 2 年内结束,这是一个问题吗? 20? 200? 2000?这在很大程度上控制了您需要支持的值的范围。然后目标代码集是另一个问题——你不得不用十六进制编码浪费了一大笔积蓄。
【参考方案1】:
定义您想要支持的最短时间,并计算自该时间以来的分钟数,并按照您的建议减少秒数。在代码支持的基础中对该值进行编码,例如代码 39 的基数为 43。该代码中的 5 个字符可让您表示近 280 年(43^5 分钟)的时间跨度。
【讨论】:
“一个无符号的二补二进制数”?嗯 - 不能是unsigned
和“补码”。
@owlstead:分钟数的编码无关紧要(二进制或非二进制),它是一个需要编码的抽象数字,例如基数 43。
这是一个有趣的方法。我会考虑使用它。谢谢。以上是关于将时间戳编码为最少的字符的主要内容,如果未能解决你的问题,请参考以下文章