Foros del Web » Programación para mayores de 30 ;) » Java »

Programa CRC 2

Estas en el tema de Programa CRC 2 en el foro de Java en Foros del Web. El siguiente programa calcula el CRC16 CCITT de los valores introducidos por teclado. Lo que quiero saber es si alguien me podria ayudar a modificarlo ...
  #1 (permalink)  
Antiguo 15/07/2008, 06:27
 
Fecha de Ingreso: julio-2008
Mensajes: 8
Antigüedad: 15 años, 9 meses
Puntos: 0
Sonrisa Programa CRC 2

El siguiente programa calcula el CRC16 CCITT de los valores introducidos por teclado.

Lo que quiero saber es si alguien me podria ayudar a modificarlo de tal forma que el programa en vez de coger los valores por teclado, se le pueda introducir el nombre de un fichero con los datos para calcular su CRC.

Muchas gracias a todos!!!


/************************************************** ***********************
* Compilation: javac CRC16CCITT.java
* Execution: java CRC16CCITT s
* Dependencies: StdIn.java
*
* Reads in a sequence of bytes and prints out its 16 bit
* Cylcic Redundancy Check (CRC-CCIIT 0xFFFF).
*
* 1 + x + x^5 + x^12 + x^16 is irreducible polynomial.
*
* % java CRC16-CCITT 123456789
* CRC16-CCITT = 29b1
*
************************************************** ***********************/

public class CRC16CCITT {

public static void main(String[] args) {
int crc = 0xFFFF; // initial value
int polynomial = 0x1021; // 0001 0000 0010 0001 (0, 5, 12)

// byte[] testBytes = "123456789".getBytes("ASCII");

byte[] bytes = args[0].getBytes();

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));
}

}
  #2 (permalink)  
Antiguo 15/07/2008, 11:07
Avatar de Xinef  
Fecha de Ingreso: marzo-2007
Mensajes: 202
Antigüedad: 17 años, 1 mes
Puntos: 7
Respuesta: Programa CRC 2

Cita:
Iniciado por bonethugs Ver Mensaje
El siguiente programa calcula el CRC16 CCITT de los valores introducidos por teclado.

Lo que quiero saber es si alguien me podria ayudar a modificarlo de tal forma que el programa en vez de coger los valores por teclado, se le pueda introducir el nombre de un fichero con los datos para calcular su CRC.

Código PHP:
import java.io.*;

class 
CRC {

    public static 
void main(String[] args) {

        
codificador cod = new codificador();
        
cod.Leefichero("prueba4.hex");
    }
}

class 
codificador {

    public 
void Leefichero(String fichero) {

        
int crc 0xFFFF;
        
int polynomial 0x1021
        
        try {

            
InputStream lector = new BufferedInputStream(new FileInputStream(fichero));
            
            
int b;
            
            while ((
lector.read()) != -1) {        
                
System.out.println("*: " b);
                for (
int i 08i++) {
                    
boolean bit = ((>> (7-i) & 1) == 1);
                    
boolean c15 = ((crc >> 15 1) == 1);
                    
crc <<= 1;
                    if (
c15 bit) {
                        
crc ^= polynomial;
                    }
                }

                
crc &= 0xffff;
            }


            
lector.close(); //Cierra el fichero y lo libera de la memoria


        
} catch (Exception e) { //Código que se ejecuaría si fallara el codigo del try
            
System.out.println("Error: " e);
            
System.exit(1);
        }

        
System.out.println("CRC = " Integer.toHexString(crc));


    }

Lo he probado con el código CRC que ponía de ejemplo, en un archivo de 9bytes: 31 30 33 34 35 36 37 y funciona.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:48.