如何将数字 365 存储在 8 位上

How to store the number 365 on 8 bits

一点背景知识:最初设计应用程序时(好吧,15 多年前),我们的客户向我们保证,他们的业务计划永远不会改变,因此设计了应用程序。

应用程序管理证书,根据国家法律,我们的客户必须每半年(180 天)更新一次,这些证书存储在智能卡上,分发给属于我们客户的各个人员单位.

这些智能卡用于接入各种现场系统,智能卡reader会根据需要自动调整上面的数值,比如递减剩余天数。当此号码达到零时,将再次使用初始 180 号码重新发行卡

智能卡上塞满了各种信息,其中有一个8位的值,告诉你还剩多少天。因为有人在 15 年前从未想过 15 年后法律会改变,他们认为 8 位应该对每个人都足够了。

显然,现在客户提出了变更请求...告诉我们有计划修改法律以允许现有证书延长至 1 年...

问题来了:我们如何在 8 位上存储 365...欢迎任何黑客攻击。

我建议另一种方法:您可以修改智能卡 reader 以每 2 天递减一次计数器吗? 所以你需要数到 183(闰年)。

编辑
闰年 位也有空间,假设您反转计数逻辑。
如果你从 0 数到 182(从 0 到 364 天),当计数器达到 160(128+32)后 1010 0000 位置 7 的位不再改变。

if (dayCount >= 160) {
    realDayCount = dayCount & 0xBF;   // 1011 1111
    leapFlag = dayCount & 0x40;       // 0100 0000
}