2017-03-20 8 views
-3

Ich möchte eine Schnur als Zahl kodieren und die ursprüngliche Zeichenkette von dieser Zahl mit einer anderen Funktion zurückholen. Es muss nur ASCII-Zeichen zwischen 0 und 255 unterstützen, nicht Unicode. Die Zahl kann Integer oder Float sein.Oracle - Wie man eine Zeichenkette als Zahl kodiert und die ursprüngliche Zeichenkette von dieser Zahl abruft

Wurde daran gedacht, den Ascii-Wert durch die Position und 256 zu multiplizieren und dann das Ergebnis hinzuzufügen, aber nicht sicher, ob das funktionieren wird.

Die Länge der Zeichenfolge kann bis zu 240 Zeichen lang sein.

Die beabsichtigte Verwendung besteht darin, einen Zeichenfolgenwert in einen Zahlenwert zur Verwendung in Algorithmen des maschinellen Lernens umzuwandeln; da viele maschinelle Lernalgorithmen einen numerischen Wert anstelle eines Zeichenfolgenwerts benötigen.

+0

Warum würden Sie das tun? In jedem Fall benötigen Sie für jedes Zeichen ein Byte. Mit dieser Methode werden Sie nicht weit kommen. –

+0

Benötigen Sie eine schnelle Funktion, um eine Zeichenkette in Nummer für maschinelles Lernen zu konvertieren. – Superdooperhero

+0

http://xyproblem.info/. Ich schlage vor, diese Frage zu schließen und einen neuen Beitrag mit der eigentlichen Frage zu eröffnen. –

Antwort

-1
function str2num 
(
    p_string in varchar2 
) return number is 

l_i  number(15); 
l_c  number(15); 
l_answer number(38); 

begin 

    l_answer := 0; 
    for l_i in 1..length(p_string) loop 
     l_c := ascii(substr(p_string, l_i, 1)); 
     l_answer := l_answer + (l_c * power(2, (l_i - 1) * 8)); 
    end loop; 

    return l_answer; 

end str2num; 

Kann nur 52 Zeichen, aber gut genug behandeln. Jetzt ist die Frage, was ist die gegenteilige Funktion.

+0

Angenommen, Ihre Zeichenkette ist: ABC A = 65, B = 66, C = 67 CodeNum = 65 + 66 * 256 + 67 * 256 * 256 = 4407873 4407873/(256 * 256) = 67 ----> C 4407873% (256 * 256) = 16961 16961/256 = 66 ---> B 16961% 256 = 65 ---> A Wie ich Ich sagte Ihnen vorher, ich glaube nicht, dass Sie mehr als 4 oder 5 Zeichen kodifizieren können (Überlauf numerisch) – etsa

+0

Eine 240-Zeichen-Zeichenfolge, die auf diese Weise codiert ist, wird die Kapazität einer Oracle-NUMMER weit überschreiten. 240^256 ~ = 7e + 608. –

-3

Unter der Annahme Startposition 1:

ASCII-Wert * 256^(Position - 1)

Wie lange kann die Zeichenfolge sein? Der numerische Wert kann sehr hoch sein!

Wenn Zeichenketten, über die Sie sprechen, "begrenzt" (in Anzahl) und sich wiederholend (zB Wörter oder Sätze) sind, können Sie sie in eine Tabelle schreiben (id bigint, descr VARCHAR (240)) und die ID als Nummer. Was denken Sie?

+0

Die Zeichenfolge kann 240 Zeichen lang sein – Superdooperhero

+0

Wie Sie sich vorstellen können, die Anzahl kann zu groß sein! – etsa

+0

Das Schreiben in eine Tabelle ist genau das, was ich vermeiden möchte. – Superdooperhero

Verwandte Themen