1

我只是有一个关于如何获取包含十六进制数字的文件长度的快速问题。例如:

724627916C

我能想到的唯一方法是将十六进制值转换为二进制:

724627916C => 0111001001000110001001111001000101101100

然后计算二进制值的位数。只是想知道这是否是正确的方法?谢谢

4

5 回答 5

15

不,这不是正确的方法。

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

原则上:打开一个文件,寻找到最后并检索您当前的位置。您将得到的是文件中的字节数。

编辑:你的问题有点不清楚。您要检索文件中的字节数,还是文件中十六进制字符串表示的字节数?如果是后者,并且您的文件中没有任何空格,只需将上述方法返回的字节数除以 2。

于 2009-11-03T19:43:07.360 回答
2

在 un*x-like 操作系统中,stat可用于该目的。

于 2009-11-03T19:44:19.237 回答
1

试试这个答案以获得一些帮助。如果这不起作用,谷歌有大量关于确定 C 文件大小的信息。

于 2009-11-03T19:43:30.987 回答
0

如果要计算位,则设置一个数组会更简单,该数组告诉您在每个十六进制数字中设置了多少位(由字符代码索引),然后在不显式转换为二进制的情况下将其相加。

假设 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);
于 2009-11-03T23:52:40.253 回答
0

C 中的文件长度使用函数_filelength()

#include <io.h>

int fn, fileSize;
FILE * f = fopen(&String, "rb");
if (f)
{
  fn = _fileno(f);
  fileSize = _filelength(fn);
}
fclose(f);
于 2014-04-20T01:45:44.823 回答