【发布时间】:2021-12-26 17:07:48
【问题描述】:
我正在尝试编写一个程序,该程序接受一个文件,并以不同的间隔从中读取字节,并将它们分配给一个变量。 这是我目前拥有的:
struct casc_file_parsed {
unsigned int targetsize;
uint64_t blocksize;
uint64_t blockcount;
csc_block_t* blocks;
};
struct casc_file_parsed parsed_casc_file;
FILE* fpc = fopen(casc_file_data, "r");
char c;
char str[MAX];
int i = 0;
int j = 0;
for(i = 0; i >= 24; i++) {
if(i >= 16 && i <= 24) {
str[j] = c;
j++;
}
c = fgetc(fp);
}
parsed_casc_file.targetsize = str;
我还没有测试它,因为我知道它还没有完成,需要添加其他功能才能运行。我在这种方法中试图做的是创建一个循环,如果 I 是 16-24 的间隔,它将当前字节保存到数组 str 中。然后需要将数组转换为 int,并保存在结构中(我知道底线不起作用)。 我不确定这是否是最好的方法,但如果有更好的方法或者我遗漏了什么,我现在真的可以使用一些输入。
编辑: .cascade 文件是一个 64 字节的文件,包含描述另一个文件的哈希列表。该文件中的 16-24 字节,包含原始文件的文件长度,为网络字节序的无符号整数。
【问题讨论】:
-
以文本模式(“r”)打开文件看起来很可疑。
-
@Passerby 我不确定你所说的可疑是什么意思,但我想我只需要从中阅读,而不是写任何东西。当我想到它时,我实际上可能不得不使用 rb。
-
我希望看到使用
fseek()和fread()的代码,而不是使用fgetc()进行迭代。 64 字节的文件无关紧要。如果起始偏移量很小,则无关紧要,但是如果文件是 64 MiB 并且起始偏移量是大约 10 兆字节,则会有很大的不同。 -
如果您只处理总共 64 字节的文件,只需分配一个 64 字节的缓冲区,然后用一个
fread()将整个文件读入内存。之后根据需要摆弄字节数组。 -
for(i = 0; i >= 24; i++)根本不循环,因为0 >= 24是假的。
标签: c loops networking byte cascade