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.
Annonceindlæg fra Admin By Request
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 !
24. november 2005 - 16:40
#2
og metoden skal vel også være void ??
24. november 2005 - 16:40
#3
byte[] t = skal nok være byte t =
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
24. november 2005 - 16:44
#5
husk at java byte er signed hvilket godt kan drille nogen gange
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...
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
25. november 2005 - 11:40
#8
okay tak, arne du kan bare smide et svar :)
25. november 2005 - 11:50
#9
ok har du fået det til at virke ?
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 :)
Kurser inden for grundlæggende programmering