Así que no estoy del todo seguro de cómo utilizar fread. Tengo un archivo binario en little-endian que necesito para convertir a big-endian, y no sé cómo leer el archivo. Aquí es lo que tengo hasta ahora:

FILE *in_file=fopen(filename, "rb");
char buffer[4];
while(in_file!=EOF){
    fread(buffer, 4, 1, in_file);
    //convert to big-endian.
    //write to output file.
}

No he escrito nada aún, pero no estoy seguro de cómo obtener fread a ‘el progreso’, por así decirlo. Cualquier ayuda se agradece.

Completa el programa y ejecutarlo! fread va a leer a partir de donde lo dejó la última vez que el bucle. Usted debe verificar el valor de retorno de fread. infile no es probable para comparar igual a EOF.
El primer paso en el progreso es lea la documentación.
Para uno, «rb» significa Iead Bdisciplinaria, por lo que la matriz debe ser de tipo int, char no.
Yo en realidad no está de acuerdo. La matriz debe ser chars. Los caracteres binarios son un solo byte, mientras que un entero de 4 bytes. Así que en este caso el uso de una matriz de char sería una mejor representación porque uno char representa un byte.

OriginalEl autor user202925 | 2013-03-29

1 Comentario

  1. 16

    Que no es la forma de leer correctamente desde un archivo en C.

    fread devuelve un size_t que representa el número de elementos de leer correctamente.

    FILE* file = fopen(filename, "rb");
    char buffer[4];
    
    if (file) {
        /* File was opened successfully. */
    
        /* Attempt to read */
        while (fread(buffer, 1, 4, file) == 4) {
            /* byte swap here */
        }
    
        fclose(file);
    }

    Como se puede ver, el código anterior sería dejar de leer tan pronto como fread extractos de otra cosa que de los 4 elementos.

    Sugiero while (fread(buffer, 1, 4, file) == 4) { ... } con el fin de garantizar que los 4 bytes se leen y evitar un comportamiento indefinido de uso no inicializado valores.
    Gracias por mencionarlo. Me acabo de dar cuenta de que yo debería ser el uso de 1 para el tamaño y 4 para el recuento. También, un nombre genial bro!
    De hecho. No me había dado cuenta de que, sin embargo. Mi comentario era en lo que respecta a la forma explícita de comparar el valor de retorno a 4, en lugar de 0, porque si fread a devolver en 3, 2 o 1, entonces no habría no inicializado bytes en el buffer, lo que podría resultar en un comportamiento indefinido si los valores fueron utilizados.

    OriginalEl autor Mohamad Ali Baydoun

Dejar respuesta

Please enter your comment!
Please enter your name here