27. oktober 2003 - 15:20Der er
15 kommentarer og 2 løsninger
Oversæt 10 linjer fra C til Java
Nogen der gider oversætte det her fra C til Java? Jeg kunne måske oversætte det selv, men det ville involvere en hel del gætteri og det er jeg ikke meget for, da jeg så ikke ville være sikker på det fungerer som det skal.
void code(long* v, long* k) { unsigned long y=v[0],z=v[1], sum=0, delta=0x9e3779b9, n=32 ; /* a key schedule constant */ while (n-->0) { /* basic cycle start */ sum += delta ; y += (z<<4)+k[0] ^ z+sum ^ (z>>5)+k[1] ; z += (y<<4)+k[2] ^ y+sum ^ (y>>5)+k[3] ; /* end cycle */ } v[0]=y ; v[1]=z ; }
Det kan jeg ikke se der er. Måske er long endda bedre lige netop her, idet den unsigned long fra C måske er unsigned fordi den så kan indeholde et ekstra ciffer - hvilket vil forårsage fejl hvis man vælger signed java-int som er samme størrelse som en signed C-long ... giver jeg mening?
Nåh, ja du har ret hvis metoderne kaldes i samme klasse. Men ellers giver det ikke mening. Du kan vel ikke lige røbe hvordan man lave int[] om til byte[] og tilbage igen på en stensikker måde?
int[] -> byte[] er simpelt cast af elementerne byte[] -> int[] kræver den afskyelige and med 0xFF (hvis man vil have de unsigned værdier)
Eksempel:
public class IntByteInt { public static void main(String[] args) { int a[] = new int[256]; for(int i = 0; i < a.length; i++) { a[i] = i; } byte[] b = new byte[256]; for(int i = 0; i < b.length; i++) { b[i] = (byte)a[i]; } int[] c = new int[256]; for(int i = 0; i < b.length; i++) { c[i] = 0xFF & b[i]; } for(int i = 0; i < a.length; i++) { if(a[i] != c[i]) { System.out.println(i + " : " + a[i] + " -> " + c[i]); } } } }
Synes godt om
Ny brugerNybegynder
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.