16 進数を含むファイルの長さを取得する方法について簡単な質問があります。例えば:
724627916C
私が考えることができる唯一の方法は、16 進数値を 2 進数に変換することです。
724627916C => 0111001001000110001001111001000101101100
次に、バイナリ値のビットを数えます。これが正しい方法であるかどうか疑問に思っていますか?ありがとう
いいえ、これは正しい方法ではありません。
FILE *fp = fopen("filename", "rb");
fseek(fp, 0, SEEK_END);
int lengthOfFile = ftell(fp);
fclose(fp);
原則として、ファイルを開き、最後までシークして現在位置を取得します。得られるのは、ファイル内のバイト数です。
編集:あなたの質問は少し不明確です。ファイル内のバイト数、またはファイル内の 16 進文字列で表されるバイト数を取得しますか? 後者の場合で、ファイルに空白がない場合は、上記のメソッドで返されたバイト数を 2 で割ります。
un*x ライクなオペレーティング システムでstat
は、その目的で使用できます。
この回答を試してください。それがうまくいかない場合、Google は C でのファイル サイズの決定に関する多くの情報を提供しています。
ビット数を数えたい場合は、各 16 進数 (文字コードでインデックス付け) に設定されているビット数を示す配列を設定し、バイナリに明示的に変換せずに加算する方が簡単です。
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);
C のファイル長は関数_filelength()を使用します
#include <io.h>
int fn, fileSize;
FILE * f = fopen(&String, "rb");
if (f)
{
fn = _fileno(f);
fileSize = _filelength(fn);
}
fclose(f);