如何在c中获取文件长度?

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

724627916C 

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

 724627916C => 0111001001000110001001111001000101101100 

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

不,这不是正确的方法。

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

原则上:打开文件,搜索到最后并检索当前位置。 你会得到的是文件中的字节数。

编辑:你的问题有点不清楚。 是否要检索文件中的字节数,或者文件中hex字符串表示的字节数? 如果是后一种情况,并且文件中没有任何空格,只需将上述方法返回的字节数除以2即可。

在类似于* x的操作系统中, stat可用stat目的。

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

如果要对这些位进行计数,那么设置一个数组可以更简单,该数组告诉您在每个hex数字中设置了多少位(由字符代码索引),然后添加内容而不显式转换为二进制。

假设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  int fn, fileSize; FILE * f = fopen(&String, "rb"); if (f) { fn = _fileno(f); fileSize = _filelength(fn); } fclose(f);