我是C语言的新手,我试图从一个整数的二进制文件中获取一个整数数组,我不明白如何修复我的函数。
int test_read(const char* filename) {
FILE *fp;
fp = fopen(filename, "r");
if (fp == NULL) {
printf("Erreur lors de l'ouverture du fichier.\n");
return 0;
}
/*fseek(fp,0L,SEEK_END);
if((ftell(fp)%4) != 0){ printf("SEG FAULT");return 0;};
fseek(fp,0L,SEEK_SET);*/
int* tab = new_tab(100);
int k = 0;
while (fgetc(fp) != EOF) {
int a=0;
for(int i=0;i<sizeof(int);i++){
a = (a<<8|fgetc(fp));
}
tab[k]=a;
k+=1;
}
print_tab(tab);
fclose(fp);
return 1;
int *new_tab(int size){
if(size>0) {
int *tab = malloc((size)*(sizeof(int)));
for (int i = 0; i < size; i++) {
tab[i] = i + 1;
}
return tab;
}
else{
printf("erreur");
return NULL;
}
}
int main(void) {
test_read("data/100");
}
字符串
data/100包含100个整数作为二进制。
这就是回报我
-1114095639 120378042 -173307421 -1962110490 -19512031 -1843036650 86438161 -903216896 1578651565 1947564876 1435467956 2121161697 -817940757 -1854549618 16834356 -486212261 -1182672308 -660020925 -2020002901 640444696 -1 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
型
我知道我有一个问题的方式im得到整数,但我不能得到它。如果有人可以帮助我,谢谢
2条答案
按热度按时间wr98u20j1#
首先,我强烈建议您查看fwrite和fread的手册页。它们提供了有用的信息,并提供了给予清晰的用法示例。我认为它们是实现此功能所需的函数。
当打开一个二进制文件时,应该使用二进制模式。这是非常重要的,因为在Windows上,正常读取模式和二进制读取模式之间有不同的行为(参见this answer了解原因)。因此,特别是,
FILE *fp = fopen(filename, "rb");
是这种情况下的正确代码。直接从流中读取整数(即二进制):
字符串
例如,读取100个整数:
型
另一种方式,这是很好看,但肯定不是作为可读海事组织是:
型
请注意,我做的是 no 错误检查,这是给读者的练习。
(小提示:我假设整数的二进制文件是由你用来读取的同一台计算机编写的(或者至少是相同的体系结构),这很可能是事实。这是为了确保你的计算机上的整数的大小与文件编写者的相同,并且二进制文件中整数的字节顺序与你的计算机相同:如果这不是真的,你可能会犯一些奇怪的错误)
3pmvbmvn2#
这个最小的例子使用
fwrite
将整数0到9的平方的二进制表示写入临时文件。然后使用rewind
将文件位置返回到开头,然后fread
将10个整数写入新分配的内存。字符串