Colección de citas famosas - Diccionario de frases chinas - ¿Qué es el algoritmo CRC en Java?

¿Qué es el algoritmo CRC en Java?

Hay dos métodos para implementar el algoritmo CRC, uno es el método de tabla de búsqueda y el otro es el cálculo directo. La velocidad de cálculo del método de tabla de búsqueda es relativamente rápida. Se introduce el método de cálculo directo, que utiliza 2. Este método se implementa encapsulando el algoritmo de forma orientada a objetos.

paquete com.wms.serial;

/**

* @autor linduo

* @versión 2006/08/25

*/

clase pública CRC16{

valor int público;

CRC16 pública()

{

valor = 0;

}

/** actualizar CRC con el byte b */

actualización pública vacía (byte aByte)

{

int a, b;

a = (int) aByte;

for (int recuento = 7; recuento > =0; contar--) {

a = a << 1;

b = (a >>>8) & 1;

si ( (valor & 0x8000) != 0) {

valor = ((valor << 1) + b) ^ 0x1021;

} else {

valor = (valor << 1) + b;

}

}

valor = valor & 0xffff;

retorno;

}

/** restablecer el valor CRC a 0 */

public void reset()

{

valor = 0;

}

public int getValue()

{

valor de retorno;

}

public static void main(String[] args) {

CRC16 crc16 = nuevo CRC16();

byte[] b = nuevo byte[]{

//(byte) 0xF0,(byte)0xF0,(byte)0xF0,(byte)0x72

(byte) 0x2C,(byte)0x00,(byte)0xFF, (byte)0xFE

,(byte) 0xFE,(byte)0x04,(byte)0x00,(byte)0x00

,(byte) 0x00,(byte)0x00

};

for (int k = 0; k < b.length; k++)

{

crc16.update(b[ k]);

}

System.out.println(Integer.toHexString(crc16.getValue()));

System.out.println( Integer.toHexString(b.length));

}

}

paquete com.wms.serial;

clase pública CRC162 {

public static final void main(String[] args){

CRC162 crc16 = nuevo CRC162();

byte[] b = nuevo byte[ ]{

//(byte) 0xF0,(byte)0xF0,(byte)0xF0,(byte)0x72

(byte) 0x2C,(byte)0x00,(byte) 0xFF,(byte)0xFE

,(byte) 0xFE,(byte)0x04,(byte)0x00,(byte)0x00

,(byte) 0x00,(byte)0x00

};

System.out.println(Integer.toHexString(crc16.encode(b)));

//Reemplace este 2f49 con The last dos bytes de la matriz b generan una nueva matriz b2

byte[] b2 = nuevo byte[]{

//(byte) 0xF0,(byte )0xF0,(byte) 0xF0,(byte)0x72

(byte) 0x2C,(byte)0x00,(byte)0xFF,(byte)0xFE

,(byte) 0xFE ,(byte)0x04, (byte)0x00,(byte)0x00

,(byte) 0x2f,(byte)0x49

};

System.println(Integer. toHexString(crc16.encode(b2))); //El cálculo es 0

//Puedes construir algunos bytes para intentar cifrar y descifrar

}

codificación corta pública (byte[] b){

short CRC_x = 0;

int pp = 65536; // 1<<16;

int pp2 = 69665; // (1<<16) + (1<<12) + (1<<5) + 1

for(int i=0;i

for(int j=0;j<8;j++){

CRC_x = (corto)((CRC_x<<1) + ( ((b[i]< >7));

if((CRC_x/pp) == 1){

CRC_x=(corto)( CRC_x^pp2);

}

}

}

devolver CRC_x;

}

}