2012-10-20 21 views
5

Ho questo codice. Per favore, fammi capire che cosa significa questo codice in realtàCosa significa 0x0F? E cosa significa questo codice?

for(var i = 0; i < input.length; i++) 
    { 
    x = input.charCodeAt(i); 
    output += hex_tab.charAt((x >>> 4) & 0x0F) 
      + hex_tab.charAt(x  & 0x0F); 
    } 

Che cos'è 0x0F? E, >>> significa?

+1

'0x0f' è una rappresentazione esadecimale di un byte. Nello specifico, il pattern di bit '00001111' – Basic

+0

Ok, e come funziona quell'espressione? in che modo '(x >>> 4) & 0x0F' restituisce il valore intero, in quanto la funzione chatAt() richiede l'immissione di numeri interi – Prakash

risposta

10

>>> è l'operatore di spostamento a destra bit a bit senza segno. 0x0F è un numero esadecimale che equivale a 15 in decimale. Rappresenta i quattro bit inferiori e traduce il modello di bit 0000 1111. & è un'operazione bit a bit AND.

(x >>> 4) & 0x0F fornisce il bocconcino superiore di un byte. Quindi, se avete 6A, che, fondamentalmente, finisce con 06:

6A = ((0110 1010 >>> 4) & 0x0F) = (0000 0110 & 0x0F) = (0000 0110 & 0000 1111) = 0000 0110 = 06 

x & 0x0F ti dà la nibble inferiore del byte. Quindi se hai 6A, finisci con 0A.

6A = (0110 1010 & 0x0F) = (0110 1010 & 0000 1111) = 0000 1010 = 0A 

Da quello che posso dire, sembra che si sommando i valori dei singoli stuzzichini di tutti i caratteri di una stringa, forse per creare un checksum di qualche tipo.

-1

0x0F è un numero esadecimale. E >>> è l'operatore di spostamento a destra bit a bit.

4

0x0f è una rappresentazione esadecimale di un byte. Specificamente, la sequenza di bit 00001111

Sta prendendo il valore del carattere, spostandola 4 posti a destra (>>> 4, è un unsigned shift) e poi eseguendo una bit-wise AND rispetto al precedente - esempio ignorando la sinistra la maggior parte dei 4 bit risultanti in un numero 0-15.

Quindi aggiunge quel numero ai 4 bit più a destra del carattere originale (il 2o & 0x0F senza uno spostamento), un altro numero 0-15.

+0

Ok, puoi fornire lo stesso codice per la conversione in PHP. Sto avendo molti problemi a convertirlo in PHP. Come faccio lo stesso processo in PHP? – Prakash

+0

Tutte le operazioni possono essere eseguite allo stesso modo in PHP. [Vedi qui] (http://php.net/manual/en/language.operators.bitwise.php) per la sintassi – Basic

+0

Attento '>>>' non è un semplice spostamento verso destra. È un turno senza segno e quindi ignora il bit del segno. –