2016-07-13 8 views
0

Arbeiten in Cobol und mit einer 18-stelligen Nummer muss ich in 10 Alphanumeric BASE36 (15 Ziffern) konvertieren. Es ist in BASE 80 möglich, aber ich habe nur 10 Bytes in Großbuchstaben zur Verfügung ... Um die 18 Ziffern zu reduzieren, kann ich eine andere bekannte Zahl zwischen 000000001 und 9999999999 (es ist eine Kontonummer von 10 Ziffern mit dem Modul in der letzten ciffer) verwenden bin im Grunde mit keine Kompression übrig Irgendwelche Ideen? Ich muss zurück auf die ursprüngliche Zahl umwandeln ...Komprimieren 19 Ziffern zu BASE36 10 alphanumerische

+0

Basen sind nur einfache Reste, wenn die Dezimalzahl durch die Basis geteilt wird. Wenn Sie komprimieren, müssen Sie sich nicht darum kümmern, dass der komprimierte Wert lesbar ist, es sei denn, Sie benötigen etwas. Warum willst du das machen und über welche Bände sprichst du? Auch COBOL Version und OS wären nützlich. Setzen Sie so viele Informationen wie möglich in die Frage ein (verwenden Sie den Link zum Bearbeiten unter der Frage), sonst erhalten Sie schlechtere Antworten. –

+0

Was zum Teufel. Wenn Sie Zeichen benötigen, um eine Basis darzustellen, haben Sie Groß-, Klein- und Sonderzeichen ("shift" und die Zahlen geben Ihnen 10 weitere). Ich habe noch weitere 12 alphanumerische Tasten auf meiner Tastatur, die verschoben werden können , und ein paar mehr verfügbar mit alt-gr. Wenn es nirgendwohin geht, also keine Notwendigkeit, lesbar codiert zu sein, wie wäre es, nur bei gepackt-Dezimal (19 Ziffern passt in 10 Bytes) oder binär (18 Ziffern passt in acht Bytes) –

+0

Was bedeutet das: "Um die 18 Ziffern zu reduzieren, kann ich eine andere bekannte Nummer zwischen 000000001 und 9999999999 (es ist eine Kontonummer von 10 Ziffern mit Modul in letzten ciffer)" –

Antwort

0

Dies ist ein Schuss im Dunkeln. Sie können dies wissen, aber hier ist die Basis, um 10 Umwandlung Formel zu basieren. Nehmen wir an, Sie haben eine Nummer 45678 für meine Einfachheit Gründe. Beginnen Sie mit dem Wert der Ziffer rechts. Fügen Sie es zu der Stelle zu ihm übrig geblieben ist * Basis, die Erhöhung mit der Basisleistung:

8+(7*36)+(6*36*36)+(5*36*36*36)+(4*36*36*36*36) = 6959780 base 10 

Natürlich müssen Sie unter Umständen Code machen, um Zeichen als numerische Werte zu erkennen. Daher meine Einfachheit.

+0

OK, aber das ist der "falsche Weg". Es muss * zu * Basis 36 gehen. –

1

Sie können nicht. 36 ist viel weniger als 10 (oder 10 , was ist das?), So ist es nicht möglich, alle 19 oder 18-stelligen Nummern in der Basis 10 mit 10-stelligen Nummern in der Basis 36 darzustellen

+0

Es ist COBOL. Es gibt völlig kein Problem mit dem nativen Speichern von 19 (oder 18) Ziffern in 10 Bytes. In der Tat gibt es kein Problem, dies in acht Bytes zu tun. Ist die implizite Anforderung, ein Problem "lesbar" zu sein (z. B. Übertragung von Mainframe zu Nicht-Mainframe mit unterschiedlicher Codierung), wenn bis zu 96 Zeichen verfügbar sind. Wie hilfreich, ohne dem OP eine Chance zu geben, sich zu erweitern, ist "Du kannst es nicht tun"? Zumindest hat es eine Stimme bekommen. –

+0

Das OP sagte nicht 10 Bytes. Das OP sagte 10 Basen-36 Ziffern, d. H. Nur Ziffern und Großbuchstaben. Die Frage ist ziemlich explizit, was erlaubt ist. Das kann mathematisch nicht gemacht werden. Das OP hat jetzt genug Informationen, um die 36 in 36^10 zu betrachten und herauszufinden, was es sein müsste. Die Frage erkennt bereits an, dass es mit mehr Zeichen möglich wäre (80), fragt aber, ob es mit 36 ​​möglich ist. Die Antwort lautet nein. (Das OP würde 64 Zeichen zur Auswahl haben, für 18 Ziffern. Obwohl das OP nicht klar ist, wie viele Ziffern tatsächlich codiert werden müssen.) –

+0

"aber ich habe nur 10 Bytes zur Verfügung". OK, der Mangel an Klarheit in der Frage macht es für Interpretation offen. Schon heißt es in der Frage, dass es für Base 36 nur 15 Ziffern geben kann.Scheint nicht, sie zu stoppen, etwas tun zu wollen, obwohl es noch unklar ist, was. Sie weisen darauf hin, was bereits gesagt wurde (vielleicht, aber zumindest denke ich, dass das klar ist) in der Frage. Du hast recht, aber OP weiß es schon. –

Verwandte Themen