Sia per esadecimale che per ottale sbagli a richiamare il metodo
Integer.parseInt(binario.getString())
Con questa chiamata inizialmente converti il numero 10111001 in una stringa (binario.getString)), dopodichè la stringa "10111001" la converti in intero (parseInt)però non nel senso di conversione di base. Alla fine di questa chiamata ti ritrovi proprio il numero intero 10111001 cioè diecimilionicentoundicimilauno. Quindi con toHexString converti questo numero enorme in esadecimale. Per risolvere il problema basta sostituire Integer.parseInt(binario.getString()) con Integer.parseInt(numDecimale). Stessa cosa per ottale.