Я работаю над проектом на C, который читает текстовый файл и преобразует его в массив логических значений. Сначала я читаю файл в строку размера n
(это массив символов без знака), затем я использую функцию для преобразования этой строки в логический массив размера n * 8
. Функция работает отлично, вопросов по этому поводу нет.
Я получаю строку из файла, используя этот код:
unsigned char *Data_in; // define pointer to string
int i;
FILE* sp = fopen("file.txt", "r"); //open file
fseek(sp, 0, SEEK_END); // points sp to the end of file
int data_dim = ftell(sp); // Returns the position of the pointer (amount of bytes from beginning to end)
rewind(sp); // points sp to the beginning of file
Data_in = (unsigned char *) malloc ( data_dim * sizeof(unsigned char) ); //allocate memory for string
unsigned char carac; //define auxiliary variable
for(i=0; feof(sp) == 0; i++) // while end of file is not reached (0)
{
carac = fgetc(sp); //read character from file to char
Data_in[i] = carac; // put char in its corresponding position
}
//
fclose(sp); //close file
Дело в том, что есть текстовый файл, сделанный Блокнотом в Windows XP. Внутри него у меня есть эта строка из 4 символов ":\n\nC"
(двоеточие, клавиша ввода, клавиша ввода, заглавная C).
Вот как это выглядит в HxD (шестнадцатеричный редактор): 3A 0D 0A 0D 0A 43
.
В этой таблице становится понятнее:
character hex decimal binary
: 3A 58 0011 1010
\n (enter+newline) 0D 0A 13 10 0000 1101 0000 1010
\n (enter+newline) 0D 0A 13 10 0000 1101 0000 1010
C 43 67 0100 0011
Теперь я запускаю программу, которая печатает эту часть в двоичном виде, поэтому я получаю:
character hex decimal binary
: 3A 58 0011 1010
(newline) 0A 10 0000 1010
(newline) 0A 10 0000 1010
C 43 67 0100 0011
Ну а теперь, когда это показано, я задаю вопросы:
- Чтение правильное?
- Если да, то почему он удаляет 0D?
- Как это работает?