/*写入文件头信息(文件头含文件头标识和字符权重集)*/ int writeFileHeader(pNode root, FILE* output) { pNode nodelist[LIST_SIZE] = { NULL }; Byte total = 0; int index; /*写入文件头标识*/ fwrite(FILE_HEADER_FLAG, 2, 1, output); convertTreeToList(root, nodelist); /* * 为节省空间字符集总量存储为1个字节 * 总量1用0表示,总量256用255表示 * 所以总量 - 1 */ total = (Byte)(trimNodeList(nodelist, LIST_SIZE) - 1); /*写入字符集总数*/ fwrite(&total, sizeof(total), 1, output); /*写入每个字符以及权重*/ for (index = 0; index <= total; ++index) { pNode node = nodelist[index]; Byte byte = (Byte)node->data; fwrite(&byte, sizeof(byte), 1, output); fwrite(&node->weight, sizeof(node->weight), 1, output); } /*返回写入的文件头总字节数*/ return (total * 5 + 1 + 2); }
时间: 2024-04-23 12:22:57 浏览: 63
约瑟环C语言代码实现文档
这段代码是用来将字符集和权重信息写入到文件头中的。它首先调用了 convertTreeToList 函数,将树结构转换成一个节点列表,然后调用 trimNodeList 函数,将节点列表中的空节点去除,并计算出字符集的总数。需要注意的是,由于字符集的总数可能是 1 到 256,因此需要使用一个字节来存储。
接下来,该函数会先写入文件头标识,然后写入字符集的总数。对于每个字符,它会依次写入该字符的值和对应的权重。需要注意的是,这里使用了 fwrite 函数来写入数据,每个字符和权重都是占用一个字节,因此写入的总字节数为 total * 5 + 1 + 2,其中 5 表示每个字符和权重占用的总字节数,1 表示字符集总数占用的字节数,2 表示文件头标识占用的字节数。
需要注意的是,该函数需要传入树的根节点以及已经打开的文件指针 output。函数内部会直接向文件中写入数据,因此调用该函数前需要保证文件已经打开,并且指针指向文件的开头。函数会返回写入的文件头总字节数。
阅读全文