C 将时间戳编码为最少的字符数

C 将时间戳编码为最少的字符数,c,encoding,logic,C,Encoding,Logic,我需要创建一个条形码,其中包含一个时间戳,包括年、月、日、小时和分钟。鉴于代码的长度有限,我需要这个时间戳尽可能短 我的想法是获得UNIX时间戳,除以60(去掉“秒”数据),然后将其转换为十六进制。例如: 当前时间戳:1401546126 放下秒数:1401546126/60=23359102 转换为十六进制:0x1646E7E 打印到条形码的字符串:1646E7E 这样我可以从10个字符变为7个字符。我还考虑过使用不同的基数,比如基数36,它只能产生5个字符 有没有更好的方法可以做到这一点

我需要创建一个条形码,其中包含一个时间戳,包括年、月、日、小时和分钟。鉴于代码的长度有限,我需要这个时间戳尽可能短

我的想法是获得UNIX时间戳,除以60(去掉“秒”数据),然后将其转换为十六进制。例如:

  • 当前时间戳:1401546126
  • 放下秒数:1401546126/60=23359102
  • 转换为十六进制:0x1646E7E
  • 打印到条形码的字符串:1646E7E
这样我可以从10个字符变为7个字符。我还考虑过使用不同的基数,比如基数36,它只能产生5个字符


有没有更好的方法可以做到这一点,这可能会导致条形码中的字符更少?除了转换到更高的基数之外,还有其他解决此问题的方法吗?

定义您想要支持的最低时间,并计算自该时间起的分钟数,同时按照您的建议删除秒数。在代码支持的基数中对该值进行编码,例如代码39的基数43。代码中的5个字符允许您表示将近280年(43^5分钟)的时间跨度。

用哪种语言?这是一个不错的问题,但这是一个编程网站,所以你需要为你将要使用的语言提供一些上下文。好吧,在任何语言中。这是一个编程逻辑问题。我试图找到一种算法来编码时间戳,而不是一种特定语言的实现。我明白你的意思。我可能会使用多种语言,因此我添加了一个
C
标记,因为这些语言都是
C
派生的。您正在考虑哪种条形码编码方案?许多商业标准(即:五种编码中的两种)仅表示十进制数字
[0-9]
和一些额外的符号。您也可以使用代码39或代码93编码,但这些编码通常涉及固定宽度的数字表示,因此保存数字是毫无意义的,除非您超出了限制。您能告诉我们您将使用哪种2D(离散或连续)编码吗?该值必须唯一多长时间?如果它在2年内结束,这是一个问题吗?20? 200? 2000? 这在很大程度上控制了您需要支持的值的范围。那么目标代码集就是另一个问题了——你不得不用十六进制编码,浪费了大量的积蓄。“一个无符号、两个补码的二进制数”?嗯-不能是无符号的和“2的补码”。@owlstead:分钟数的编码不重要(二进制或非二进制),它是一个需要编码的抽象数,例如base 43。这是一种有趣的方法。我会考虑使用它。非常感谢。