Pregunta

Solo tengo una pregunta rápida sobre cómo obtener la longitud de un archivo que contiene números hexadecimales. Por ejemplo:

724627916C

La única forma en que puedo pensar es convertir el valor hexadecimal a binario:

724627916C => 0111001001000110001001111001000101101100

Luego cuente los bits de valor binario. ¿Me pregunto si esta es la forma correcta? Gracias

¿Fue útil?

Solución

No, esta no es la forma correcta.

FILE *fp = fopen("filename", "rb");
fseek(fp, 0, SEEK_END);
int lengthOfFile = ftell(fp);
fclose(fp);

En principio: abra un archivo, busque hasta el final y recupere su posición actual. Lo que obtendrá es la cantidad de bytes en el archivo.

EDITAR: Su pregunta no está clara. ¿Desea recuperar el número de bytes en el archivo o el número de bytes representados por la cadena hexadecimal en el archivo? Si este último es el caso, y no tiene espacios en blanco en su archivo, simplemente divida el número de bytes devueltos por el método anterior por 2.

Otros consejos

En sistemas operativos tipo un*X, stat se puede usar para ese propósito.

Probar esta respuesta por algo de ayuda. Si eso no funciona, Google tiene mucha información sobre la determinación del tamaño del archivo en C.

Si desea contar los bits, sería más simple configurar una matriz que le indique cuántos bits se establecen en cada dígito hexadecimal (indexado por código de caracteres) y luego agregar las cosas sin convertir explícitamente a binario.

Suponiendo C99:

static bits_map[256] =
{
    ['0'] = 0, ['1'] = 1, ['2'] = 1, ['3'] = 2,
    ['4'] = 1, ['5'] = 2, ['6'] = 2, ['7'] = 3,
    ['8'] = 1, ['9'] = 2,
    ['a'] = 2, ['b'] = 3, ['c'] = 2, ['d'] = 3,
    ['e'] = 3, ['f'] = 4,
    ['A'] = 2, ['B'] = 3, ['C'] = 2, ['D'] = 3,
    ['E'] = 3, ['F'] = 4,
};

size_t n_bits = 0;
int c;
while ((c = getchar()) != EOF)
    n_bits += bits_map[c];

printf("Number of bits set: %zd\n", n_bits);

Longitud del archivo en C Goes usa la función _filelength ()

#include <io.h>

int fn, fileSize;
FILE * f = fopen(&String, "rb");
if (f)
{
  fn = _fileno(f);
  fileSize = _filelength(fn);
}
fclose(f);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top