Help needed - facile per voi

di il
3 risposte

Help needed - facile per voi

Salve a tutti, sono nuovo...mi sono iscritto per chiedervi un aiuto

ho una funzione cosi' formata:

chiamante:
x= calc(&unlock_key[0],3,KI,KII);

funzione:
static UI_16 calc(UI_8 *data, UI_16 Num, UI_16 K1, UI_16 K2)
{
UI_16 x;
UI_8 NextByte;
UI_8 BitCount;
UI_8 carry;

x= 0xa5a5;

while (Num-- > 0) {
BitCount = 0;
NextByte = *data++;

while(BitCount < {
carry = (char)(x & 0x0001);
x = x >> 1;

if (carry ^ (NextByte & 0x1))
{
x= x^ (KII^KI);
}
NextByte = (UI_8)(NextByte >> 1);
BitCount++;
}
}
return(x);
}



Le mie domande sono le seguenti:
- while (num-- > 0) come funziona? quante volte fa esegue il while? fa prima il -1 e poi confronta o confranta e poi decrementa?

- NextByte=*data++ cosa fa? salva in nextbyte il valore del vettore unlock_key[0] e incrementa di a ogni iterazione del while il valore contenuto in 0 o a ogni iterazione incrementa il valore dell'indice e salva il valore unlock_key?

3 Risposte

  • Re: Help needed - facile per voi

    while (Num-- > 0) come funziona? quante volte fa esegue il while?
    Il decremento viene fatto dopo il test, per cui se Num lo setti a 3 (come vedo dalla chiamata) ti farà 3 volte il ciclo, prima con Num==2, poi Num==1 e infine Num==0 (perchè in fase di test Num valeva 1). Attenzione al tipo: se UI_16 volesse dire unsigned int c'è il rischio che il ciclo sia infinito...
    NextByte=*data++ cosa fa? salva in nextbyte il valore del vettore unlock_key[0] e incrementa di a ogni iterazione del while il valore contenuto in 0 o a ogni iterazione incrementa il valore dell'indice e salva il valore unlock_key?

    data punta a unlock_key[0] inizialmente; *data++ restituisce il valore puntato da data e poi sposta avanti il puntatore di una posizione in modo che alla successiva iterazione data punterà a unlock_key[1], poi [2] e via di seguito...
  • Re: Help needed - facile per voi

    Grazie per l'aiuto...

    una curiosità

    candaluar ha scritto:


    unsigned int c'è il rischio che il ciclo sia infinito...
    come mai si rischia che il ciclo sia infinito?
  • Re: Help needed - facile per voi

    come mai si rischia che il ciclo sia infinito?
    Un valore senza segno può essere inferiore a 0? No, una volta arrivato a 0 se lo decrementi andrà in overflow e praticamente ripartirà dal massimo intero.
Devi accedere o registrarti per scrivere nel forum
3 risposte