Avatar billede bjering Nybegynder
24. november 2005 - 15:59 Der er 9 kommentarer og
1 løsning

Convertere C++ til Java.

Hejsa Eksperter.

Sidder med denne kode, som jeg gerne vil lave om til java.

typedef unsigned long key[2];

void do_decode(unsigned char* buf, int size)
{
    unsigned char* dk = (unsigned char*)d;

    unsigned char b3 = buf[3];
    buf[3] ^= dk[2];

    unsigned char b2 = buf[2];
    buf[2] ^= (b3 ^ dk[3]);

    unsigned char b1 = buf[1];
    buf[1] ^= (b2 ^ dk[4]);

    unsigned char k = (buf[0] ^ b1 ^ dk[5]);
    buf[0] = (k ^ dk[0]);

    for ( int i = 1; i < size; i++ ) {
        unsigned char t = buf[i];
        buf[i] ^= (dk[i & 7] ^ k);
        k = t;
    }
}

har prøvet en masse, men da du ikke kan lave typedef i java, og da den har problemer med char* osv, ved jeg ikke helt hvad jeg kan skrive istedet

har prøvet lidt, og kommet til dette, men der er bare mange fejl i, og ved ikke om char* er det samme som java byte[]

    private byte[] do_decode(byte[] buf, int size) throws IOException
    {
        byte[] d;
       
        byte[] dk = (byte[])d;

        byte[] b3 = buf[3];
        buf[3] ^= dk[2];

        byte[] b2 = buf[2];
        buf[2] ^= (b3 ^ dk[3]);

        byte[] b1 = buf[1];
        buf[1] ^= (b2 ^ dk[4]);

        byte[] k = (buf[0] ^ b1 ^ dk[5]);
        buf[0] = (k ^ dk[0]);

        for ( int i = 1; i < size; i++ ) {
            byte[] t = buf[i];
            buf[i] ^= (dk[i & 7] ^ k);
            k = t;
        }   
        return buf;
    }

er helt på glatis her, aner heller ikke om jeg skulle poste den under c++ eller java, men valgte så c++....

har en masse mere kode, men hvis jeg bare får styr på den her, så har jeg en god ide om hvordan jeg skal fixe resten selv.

Tak.
Avatar billede arne_v Ekspert
24. november 2005 - 16:39 #1
char -> byte
char* -> byte[]

er rigtigt

jeg vil tro at du skal have en del (byte) cast ind i dine beregninger (Java vil
have en eksplicit cast for at trunkere fra int til byte)

alle bit operationerne er ens i C og Java

jeg kan ikke se hvor variablen d kommer fra i C koden, men jeg tvivler på at
java versionen er rigtig !
Avatar billede arne_v Ekspert
24. november 2005 - 16:40 #2
og metoden skal vel også være void ??
Avatar billede arne_v Ekspert
24. november 2005 - 16:40 #3
byte[] t =

skal nok være

byte t =
Avatar billede arne_v Ekspert
24. november 2005 - 16:44 #4
private void do_decode(byte[] buf, int size)
    {
        byte[] dk = (byte[])d;

        byte b3 = buf[3];
        buf[3] ^= dk[2];

        byte b2 = buf[2];
        buf[2] ^= (b3 ^ dk[3]);

        byte b1 = buf[1];
        buf[1] ^= (b2 ^ dk[4]);

        byte k = (byte) (buf[0] ^ b1 ^ dk[5]);
        buf[0] = (byte)(k ^ dk[0]);

        for ( int i = 1; i < size; i++ ) {
            byte t = buf[i];
            buf[i] ^= (dk[i & 7] ^ k);
            k = t;
        } 
    }

compiler hvis d findes
Avatar billede arne_v Ekspert
24. november 2005 - 16:44 #5
husk at java byte er signed hvilket godt kan drille nogen gange
Avatar billede bjering Nybegynder
24. november 2005 - 17:10 #6
tak arne, hvad med den der

typedef unsigned long key[2];

hvordan skal man lave den i java?, det jeg har læst er, at java ikke tillader defines og typedef's...
Avatar billede arne_v Ekspert
24. november 2005 - 17:14 #7
alle steder hvor C koden har key skal du bruge int[] direkte

for Java har ganske rigtigt ikke typedef
Avatar billede bjering Nybegynder
25. november 2005 - 11:40 #8
okay tak, arne du kan bare smide et svar :)
Avatar billede arne_v Ekspert
25. november 2005 - 11:50 #9
ok

har du fået det til at virke ?
Avatar billede bjering Nybegynder
25. november 2005 - 12:55 #10
ja, nu er jeg igang med resten af filerne, skriver dog lige en ny forespørgsel hvis det går helt galt :)
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