2016-06-01 30 views
-1

Nur ein kleiner Hintergrund: Anfangs, als die Anwendung entworfen wurde (nun, vor mehr als 15 Jahren), versicherte uns unser Kunde, dass sich ihr Geschäftsplan niemals ändern würde entworfen.Wie man die Nummer 365 auf 8 Bits speichert

Die Anwendung verwaltet Zertifikate, die nach dem Gesetz des Landes von unserem Kunden jedes halbe Jahr (180 Tage) erneuert werden müssen, und diese Zertifikate werden auf Smartcards gespeichert, die an verschiedene Personaleinheiten unseres Kunden verteilt werden.

Diese Smartcards werden für den Zugriff auf verschiedene Systeme vor Ort verwendet, und der Smartcard-Leser passt die Werte automatisch an seine Bedürfnisse an, z. B. die Anzahl der verbleibenden Tage verringert. Wenn diese Zahl Null erreicht, wird die Karte erneut mit der ursprünglichen 180 Nummer ausgegeben.

Die Smartcards sind dicht gepackt mit verschiedenen Informationen, darunter ein 8-Bit-Wert, der angibt, wie viele Tage noch übrig sind. Weil jemand vor 15 Jahren nie gedacht hat, dass sich das Gesetz in 15 Jahren ändern wird und sie dachten, dass 8 Bits für jeden ausreichen sollten.

Offensichtlich jetzt eine Änderungsanforderung kam vom Kunden ... uns sagen, dass es einen Plan, das Gesetz zu ändern, die vorhandenen Zertifikate zu ermöglichen, bis 1 Jahr zu verlängern ...

Und hier kommt die Frage: Wie können wir 365 auf 8 Bits speichern ... irgendwelche Hacks sind willkommen.

+0

Können Sie die Auflösung verringern, wenn die Anzahl hoch ist? Noch 12 Monate ... 11 Monate ... 10 Monate ... dann nach 180 Tagen auf Tage wechseln? – leekaiinthesky

+0

Sie bitten uns, etwas Unmögliches zu tun. Sie möchten mehr als 8 Bits an Informationen in 8 Speicherbits speichern. Bevor wir einen Hack vorschlagen können, brauchen wir Informationen über das System. Weißt du etwas über die Anzahl der Tage, außer dass es eine ganze Zahl ist, die neun Bits lang ist? Können Sie sagen, ob es ungerade oder gerade sein sollte? Größer als 100? Macht es Ihnen etwas aus, Genauigkeit zu verlieren? –

+0

Ein Hack, um Zähler mit niedriger Auflösung bereitzustellen, besteht darin, das niedrigste Bit fallenzulassen und bei jedem Dekrement eine Münze zu werfen, um zu sehen, ob das Dekrement durchläuft. Ist das in deinem Fall okay? –

Antwort

2

Ich schlage einen anderen Ansatz vor: Können Sie den Chipkartenleser so modifizieren, dass der Zähler alle 2 Tage dekrementiert wird? Sie müssen also bis zu 183 (für Schaltjahre) zählen.

bearbeiten
Es gibt auch Platz für ein Jahre Bit Sprung ist, vorausgesetzt, Sie das Zählen Logik umkehren.
Wenn Sie von 0 bis 182 (Tage von 0 bis 364) zählen, wird nach dem Erreichen des Zählers 160 (128 + 32) 1010 0000 das Bit in Position 7 nicht mehr geändert.

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