2017-12-31 47 views
-2

Ich mag einen Stich wie diese konvertieren:, wie eine Zeichenfolge in einzigartige integer und umgekehrt (zwischen 0 bis 255) in python3.6 konvertieren

input_str = "send_message" 

einzigartigen integer zwischen 0 bis 255 und auch wenn ich meine eindeutige ganze Zahl decodiere, kehrte diese zu der gleichen Zeichenfolge "send_message" zurück. Wie wird diese Konvertierung durchgeführt und sollte ich eindeutige Ganzzahlen in einer JSON-Datei speichern?

+2

' Hash (Eingabe_str)% 256'. Eine Umkehrung dieser Funktion ist nicht möglich. – Elmex80s

+0

@ Elmex80s Ich schätze für Ihre Hilfe, ich möchte die gleiche Antwort –

Antwort

0

Das ist nicht möglich, in der Regel ist.

Aus Ihrem Beispiel sieht es so aus, als ob Sie zulassen möchten, dass die Zeichenfolge Kleinbuchstaben und/oder den Unterstrich enthält. Das bedeutet 27 Wahlmöglichkeiten für jeden Charakter. Das heißt, es gibt 27 x 27 = 729 mögliche zweistellige Strings. Sie können 729 verschiedene Möglichkeiten nicht in die Ganzzahlen zwischen 0 und 255 einpassen und sie einzigartig halten - es wird einige Kollisionen geben, die die gleichen Ergebnisse liefern. Daher konnten Sie die ganze Zahl nicht in eine bestimmte Zeichenfolge dekodieren.

Dies wird noch schlimmer als der String länger wird, natürlich.

+0

@ ory-daulton Danke, darf ich Sie fragen, wie 27 Entscheidungen zu berechnen? –

+1

@MojtabaArvin: Es gibt 26 Buchstaben im Alphabet, "a" bis "z", plus einen Unterstrich. Das macht 27. Die Annahme ist, dass Sie auch keine Leerzeichen, andere Interpunktionszeichen oder Groß-/Kleinschreibung wollen. – BoarGules

0

Da Sie nur 256 verschiedene Zeichenfolgen haben können (weil Sie nur 256 verschiedene Ganzzahlen haben), wäre ein Ansatz, die Zeichenfolgen in einer Liste zu speichern. Wenn Sie die JSON-Datei erstellen möchten, suchen Sie die Zeichenfolge in der Liste nach oben und verwenden Sie ihren Index in der JSON-Datei. Wenn Sie eine eingehende JSON-Datei lesen, verwenden Sie den darin enthaltenen Index, um die korrekte Zeichenfolge aus der Liste abzurufen.

0

Es hat wahrscheinlich wenig praktische Relevanz, aber eine unterhaltsame Art und Weise zu bauen - in einem Rutsch - eine einzige Struktur, das hin und her hashable Objekte und 0-basierte zusammenhängende Indizes abbildet ist die folgende defaultdict:

from collections import defaultdict 
d = defaultdict(lambda: len(d) // 2) 
for s in map(str, range(256)): 
    d[d[s]] = s 

>>> d['3'] 
3 
>>> d[3] 
'3' 
Verwandte Themen