Frage

Ich habe nur eine kurze Frage, wie ich die Länge einer Datei mit Hexadezimalnummern erhalten kann. Zum Beispiel:

724627916C

Der einzige Weg, den ich denken kann, besteht darin, den Hex -Wert in Binary umzuwandeln:

724627916C => 0111001001000110001001111001000101101100

Zählen Sie dann die Bits des Binärwerts. Sie fragen sich nur, ob dies der richtige Weg ist? Vielen Dank

War es hilfreich?

Lösung

Nein, das ist nicht der richtige Weg.

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

Grundsätzlich: Öffnen Sie eine Datei, suchen Sie bis zum Ende und holen Sie Ihre aktuelle Position. Was Sie erhalten, ist die Anzahl der Bytes in der Datei.

Bearbeiten: Ihre Frage ist ein wenig unklar. Möchten Sie die Anzahl der Bytes in der Datei oder die Anzahl der Bytes abrufen, die in der hexadezimalen Zeichenfolge in der Datei dargestellt werden? Wenn der letztere der Fall ist und Sie keine Whitespaces in Ihrer Datei haben, teilen Sie einfach die Anzahl der nach der oben genannten Methode zurückgegebenen Bytes bis 2 auf.

Andere Tipps

In UN*x-ähnlichen Betriebssystemen, stat kann zu diesem Zweck verwendet werden.

Versuchen Diese Antwort für etwas Hilfe. Wenn das nicht funktioniert, hat Google zahlreiche Informationen zur Ermittlung der Dateigröße in C.

Wenn Sie die Bits zählen möchten, ist es einfacher, ein Array einzurichten, das Ihnen sagt, wie viele Bits in jeder Hex -Ziffer (indiziert mit Zeichencode) festgelegt sind, und dann die Dinge hinzuzufügen, ohne explizit in binär zu konvertieren.

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

Die Dateilänge in C wird die Funktion verwenden _Filelength ()

#include <io.h>

int fn, fileSize;
FILE * f = fopen(&String, "rb");
if (f)
{
  fn = _fileno(f);
  fileSize = _filelength(fn);
}
fclose(f);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top