ich habe folgendes problem. Ich erzeuge mit einer methode ein int[] mit 16 Einträgen, welches mit zufallszahlen zwischen 0 und 255 aufgefüllt wird.
danach wandle ich das int[] in ein BigInteger um, was auch ohne probleme klappt.
Nun möchte ich den BigInteger wieder in genau dasselbe int[] umwandeln, was nicht klappt.
Ich habe es versucht, in dem ich den BigInteger zuerst in Bytes umwandle und dann in int zahlen, aber das klappt einfach nicht.
Wie kann ich das machen?
also das programm ist etwas komplexer. Aber diese Umwandlung brauche ich halt.
Also ich erzeuge einen int[] mit zufallszahlen (Code spielt hier ja keine Rolle),
dann wandle ich ihn in einen BigInteger um:
Java:
publicBigIntegerintarrayINbiginteger(int[] e){String s ="";for(int i=0; i<e.length; i++){
s = s +Integer.toString(e[i]);}BigInteger b =newBigInteger(s);return b;}
das klappt auch, aber nun die umkehrung, die klappt nicht.
Ich will jetzt wieder, dass aus dem BigInteger der selbe int[] entsteht.
also muss ich die int werte des int array beim umwandeln in biginteger mit 0 auffüllen oder +100 nehmen, wenn ich sie in den biginteger umwandel?
aber das ist ja eigentlich schlecht. geht es nicht, dass ich anders auf die int werte komme wenn ich den BigInt habe, oder werden beim umwadeln in bytes immer 3 zeichen genommen?
Nein, bei Zahlen zwischen 0 und 255 hast du je nach Zahl 1 bis 3 Stellen, und mit diesen kannst du nicht arbeiten. Entweder du addierst jeweils 0 bis auf 3 Stellen, oder du zählst 100 dazu, so hast du immer drei Stellen (10^2 <= 0+100 | 255+100 < 10^3).
Habe schnell etwas (unschönen) Code geschrieben, welcher funktioniert (*1 mit +100, *2 mit Hinzufügen von Nullen):
Java:
publicstaticBigIntegerintArrayInBigInteger1(int[] e){String s ="";for(int i : e){
s = s.concat(Integer.toString(i +100));}returnnewBigInteger(s);}publicstaticBigIntegerintArrayInBigInteger2(int[] e){String s ="";for(int i : e){String val =Integer.toString(i);while(val.length()<3){
val ="0".concat(val);}
s = s.concat(val);}returnnewBigInteger(s);}publicstaticint[]bigIntegerInIntArray1(BigInteger e){String val = e.toString();while(val.length()%3!=0){
val ="0".concat(val);}int[] ret =newint[val.length()/3];for(int i =0; i < ret.length; i++){
ret[i]=Integer.parseInt(val.substring(i *3,(i +1)*3))-100;}return ret;}publicstaticint[]bigIntegerInIntArray2(BigInteger e){String val = e.toString();while(val.length()%3!=0){
val ="0".concat(val);}int[] ret =newint[val.length()/3];for(int i =0; i < ret.length; i++){
ret[i]=Integer.parseInt(val.substring(i *3,(i +1)*3));}return ret;}
Edit: Der Grund ist, dass du das Wissen benötigst, wo du trennen musst. In XML hast du Tags, in CSV trennst du durch , oder ;... und hier hast du nichts. Also kannst du nur auf eine fix definierte Länge die Zahlen wieder trennen.