Почему размер файла отличается, когда файлы имеют одинаковое количество символов? - PullRequest
0 голосов
/ 31 октября 2011

Здесь, когда я получаю размер файла, используя stat(), он дает другой вывод, почему он ведет себя так?

Когда "huffman.txt" содержит простую строку типа "Привет, как дела", он даетfile_size = 14.Но когда «huffman.txt» содержит строку типа «U¬SUä5Ñ®qøá« F », это дает file size = 30.

#include <sys/stat.h>
#include <stdio.h>

int main() 
{
    int size = 0;
    FILE* original_fileptr = fopen("huffman.txt", "rb");
    if (original_fileptr == NULL) {
        printf("ERROR: fopen fail in %s at %d\n", __FUNCTION__, __LINE__);
        return 1;
    }
    /*create variable of stat*/
    struct stat stp = { 0 };
    stat("huffman.txt", &stp);
    /*determine the size of data which is in file*/
    int filesize = stp.st_size;
    printf("\nFile size is %d\n", filesize);
}

Ответы [ 2 ]

1 голос
/ 31 октября 2011

Это связано с кодированием.

Простые текстовые английские символы кодируются в ASCII, где каждый символ представляет собой один байт.Тем не менее, символы в английском языке с не простым текстом кодируются в Юникоде, каждый из которых является 2-байтовым.

Самый простой способ увидеть, что происходит, - напечатать каждый символ, используя

char c;
/* Read file. */
while (c = fgetc())
  printf ("%c", c)

. Вы поймете, почему размер файла отличается.

0 голосов
/ 31 октября 2011

Если вы спрашиваете, почему разные строки с одинаковым количеством символов могут иметь разный размер в байтах, прочтите UTF-8

...