Hej,
Takker Filip og Peter,
nu har jeg fået det til at køre
Fandt frem til at jeg skulle bruge en long,
da int ik havde plads nok pga af signed bit'ten.
(skulle bruge fra 0x00000000-0xFFFFFFFF)
Tilføjede også nogle AND 0xFF + noget mere,
og så virkede det!!
(se koden)
>Virker bitoperationfunktioner ikke ens i java og pascal?
Ved det ikke, men cyc32 funktioner gav ihvert ik samme resultat...
>Det lyder sært, men
>da du ikke har postet dit java-program, er det svært at sige hvad der kan
>være galt.
Var lidt for hurtig...
>altså i for-løkken?
Ja
>jeg oversætter programmet linje for linje - så må du selv prøve om det
giver
>samme resultat,
cyc32 funktionen gav ik det samme resultat, når den blev direkte oversat..
>jeg synes det er lidt svært at gennemskue meningen med det.
Funktionen er brugt i en "krypterings" algoritme.
>Det virker ihvertfald fint her - men husk at hvis du udskriver bytes der er
>større ens 0x7f, så bliver de vist som negative tal. Det kan ordnes ved at
>typecaste dem til ints i forbindelse med udskrivningen.
ok, fandt jeg ud af
Hej er koden der virker og giver det samme resultat som pascal routinen:
(Kan sikkeret forbedres/gøres simplere)
----------------------------------
public void cyc32( byte[] buf, byte p, byte k )
{
long x;
// Kopier fire int fra buf[p] til og med buf[p+3] ind i x;
x = (buf[p] & 0xff)<<24 | (buf[p+1] & 0xff)<<16 | (buf[p+2] & 0xff)<<8 |
(buf[p+3] & 0xff);
// rotér long x til højre, k antal gange
if (k==10)
x = ( ((x >> k) & 0x003FFFFF) | (x << (32-k)) );
else //if (k==31)
x = ( ((x >> k) & 0x00000001) | (x << (32-k)) );
// Kopier x tilbage til bufferen
buf[p] = (byte)((x >> 24) & 0xff);
buf[p+1] = (byte)((x >> 16) & 0xff);
buf[p+2] = (byte)((x >> 8) & 0xff);
buf[p+3] = (byte)(x & 0xff);
}
----------------------------------
Tak for hjælpen!
--
Hilsen
M.j.