I umgewandelt dekodieren haben die folgende Oracle PLSQL Funktion, die eine ASCII-Zeichenfolge in eine Zahl konvertiert:Oracle - Wie man einen String in eine Zahl
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;
Ich möchte eine Funktion schreiben, diese Zahl zu konvertieren zurück zu die Saite.
Grundsätzlich wandelt die Funktion ein Zeichen in einen ASCII-Code um und verschiebt dann den Wert, der im Binärcode verbleibt, durch Multiplikation mit 2^(char_pos-1)*8
.
würde also der String 'Ace' wie folgt codiert werden:
Chr Ascii Pos Pos - 1 Value Binary Value
A 65 1 0 65 00000000000000001000001
c 99 2 1 25344 00000000110001100000000
e 101 3 2 6619136 11001010000000000000000
final sum = 6644545 11001010110001101000001
Wie kann ich die entgegengesetzte Funktion tun?
Teile durch die gleiche Menge verwenden, 'chr()' Funktion. –
Das Problem ist, dass Sie die einzelnen Zeichen erhalten müssen. – Superdooperhero
Sie können 'mod (value, divisor)' verwenden, um den ASCII-Code des letzten Zeichens zu erhalten, verwenden Sie 'chr()', um das zurück in ein Zeichen zu konvertieren. Dann teile die Zahl durch den Divisor und wirf den Rest weg und wiederhole den Vorgang ... –