Android CRC-CCITT

Necesito una verificación CRC para una aplicación que estoy escribiendo, pero no puedo entender el código en línea y las calculadoras qué estoy haciendo mal. Puede que simplemente no lo entienda correctamente. Esto es lo que necesito

Utiliza CRC-CCITT con un valor inicial de 0xFFFF con orden de bits de entrada inversa. Por ejemplo, el mensaje Obtener tipo de dispositivo es: 0x01, 0x06, 0x01, 0x00, 0x0B, 0xD9. El CRC es 0xD90B.

Y este es el código que estoy usando:

public static int CRC16CCITT(byte[] bytes) {
    int crc = 0xFFFF;          // initial value
    int polynomial = 0x1021;   // 0001 0000 0010 0001  (0, 5, 12) 

    for (byte b : bytes) {
        for (int i = 0; i < 8; i++) {
            boolean bit = ((b   >> (7-i) & 1) == 1);
            boolean c15 = ((crc >> 15    & 1) == 1);
            crc <<= 1;
            if (c15 ^ bit) crc ^= polynomial;
         }
    }

    crc &= 0xffff;
    //System.out.println("CRC16-CCITT = " + Integer.toHexString(crc));
    return crc;

Lo escribo para un dispositivo Android, por lo que debe estar en Java.

Respuestas a la pregunta(1)

Su respuesta a la pregunta