문제

16 진수를 포함하는 파일의 길이를 얻는 방법에 대한 빠른 질문이 있습니다. 예를 들어:

724627916C

내가 생각할 수있는 유일한 방법은 16 진수를 바이너리로 변환하는 것입니다.

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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top