Avatar billede bjering Nybegynder
11. december 2005 - 14:39 Der er 7 kommentarer og
1 løsning

Convertere Byte[] to Char[] og den anden vej rundt

Som titlen lyder.

Hvordan, og kan det lade sig gøre at convertere en byte[] til char [] og den anden vej rundt?

har denne kode, som laver fejl

                byte[] decrypt = new byte[length - 2];
                char[] data = new char[length - 2];
       
                System.arraycopy(incoming, 2, data, 0, decrypt.length);
   
                Encryption.prepareKeys(client);
                //Decrypt the data
                for(int i = 0; i < 1; ++i)
                    data = Encryption.decrypt(data);

                System.arraycopy(decrypt, 0, data, 0, decrypt.length);

får denne fejl

Server thread[C] started
java.lang.ArrayStoreException
    at java.lang.System.arraycopy(Native Method)
    at server.loginserver.ClientThread.run(ClientThread.java:143)
Server thread[C] stopped

nogen der kan hjælpe ?

Mange takker.
Avatar billede bjering Nybegynder
11. december 2005 - 14:45 #1
kunne self nævne jeg bruger jdk 1.5.0 update 6 og Eclipse som dev tool.
Avatar billede mikkelbm Nybegynder
11. december 2005 - 15:29 #2
Jeg ved ikke om det er den bedste måde, men kan du ikke køre det igennem String klassen?

String sBytes = new String (bytes);
char[] chars = s.toCharArray ();

Og

String sChars = new String (chars);
byte[] bytes = s.getBytes ();
Avatar billede jakoba Nybegynder
11. december 2005 - 15:31 #3
Du tønker i ascii hvor ingen bogstavkode fulder mere end een byte. Men Java bruger unikode hvor der ikke er nogen nem konvertering fra char til en enkelt byte, og du kan dermed heller ikke kopiere et char array til et byte array.

Hvad i alverden vil du forresten med den der for-løkke:
          for(int i = 0; i < 1; ++i)    // udfør een gang

mvh JakobA
Avatar billede bjering Nybegynder
11. december 2005 - 15:44 #4
for(int i = 0; i < 1; ++i)    // udfør een gang

er til at decrypte med.

convert til char funker ikke, eller jo det funker, men data bliver ukorrekt.

fandt en converter, men den funker kun med char, og ikke med char[] måske den kan omkskrives ?

    public static final char[] toChar(byte abyte0[], boolean flag)
    {
        char c = '\0';
        if(flag)
            abyte0 = reverse_order(abyte0, 2);
        c = (char)((c | (char)abyte0[0]) << 8);
        c |= (char)abyte0[1];
        return c;
    }

    public static final char[] toChar(byte abyte0[])
    {
        return toChar(abyte0, false);
    }

eller anden idé?
Avatar billede bjering Nybegynder
11. december 2005 - 15:49 #5
ups det var den jeg har været igang med at skrive om :D
Avatar billede bjering Nybegynder
11. december 2005 - 15:49 #6
mangler at skrive det her om

      char c = '\0';
        if(flag)
            abyte0 = reverse_order(abyte0, 2);
        c = (char)((c | (char)abyte0[0]) << 8);
        c |= (char)abyte0[1];
        return c;
Avatar billede bjering Nybegynder
11. december 2005 - 16:30 #7
fik lige at vide at løsningen måske kunne være i java.nio.charset.Charset

_char.newDecoder().decode(decrypt, data, true);
_char.newEncoder().encode(data, decrypt, true);

men begge kommer self oxo med en fejl..

The method decode(ByteBuffer, CharBuffer, boolean) in the type CharsetDecoder is not applicable
for the arguments (byte[], char[], boolean)
Avatar billede bjering Nybegynder
11. december 2005 - 17:15 #8
fandt en løsning, tager bare lidt mere hukommelse, men hvad... godt nok for nu.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester