我正在开发一个 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?
- 这是如何运作的?