C 在中读取二进制文件时获取过多的零
我正在做一个程序,读取整个二进制文件(在我的例子中是一张图片),读取2×2个字节,并打印每个字节(从0000h到FFFFh)在文件中出现的次数,但是我在捕获的零的数量方面遇到了一个问题。不知道这是否是一种常见情况,但我觉得分配数组有问题。有点像: 位发生 0 62354 1 13 2 4 35 4.2 5.2 60 7.2 655350 你们认为我做错了什么 请遵循以下代码:C 在中读取二进制文件时获取过多的零,c,binaryfiles,fread,C,Binaryfiles,Fread,我正在做一个程序,读取整个二进制文件(在我的例子中是一张图片),读取2×2个字节,并打印每个字节(从0000h到FFFFh)在文件中出现的次数,但是我在捕获的零的数量方面遇到了一个问题。不知道这是否是一种常见情况,但我觉得分配数组有问题。有点像: 位发生 0 62354 1 13 2 4 35 4.2 5.2 60 7.2 655350 你们认为我做错了什么 请遵循以下代码: #include <stdio.h> #include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned short int *n;
int cont=0;
long lsize,i,j;
FILE *arq=fopen("C:\\Users\\NB\\Documents\\Testes Allegro\\Trabalho PAQ\\imagens\\426.png","rb");
FILE *out=fopen("saida.csv","w");
fseek(arq,0,SEEK_END);
lsize=ftell(arq);
rewind(arq);
n=(unsigned short int*)malloc(sizeof(unsigned short int)*lsize);
fread(n,sizeof(short int),lsize,arq);
fprintf(out,"bit,quantidade\n");
for(i=0x0000;i<=0xffff;i++)
{
for(j=0;j<lsize;j++)
{
if(n[j]==i)
cont++;
}
fprintf(out,"%li,%d\n",i,cont);
printf("%li,%d-",i,cont);
cont=0;
}
fclose(arq);
fclose(out);
free(n);
return 0;
}
#包括
#包括
int main()
{
无符号短整数*n;
int cont=0;
long-lsize,i,j;
文件*arq=fopen(“C:\\Users\\NB\\Documents\\Testes Allegro\\Trabalho PAQ\\images\\426.png”,“rb”);
文件*out=fopen(“saida.csv”,“w”);
fseek(arq,0,SEEK_END);
lsize=ftell(arq);
倒带(arq);
n=(无符号短整型*)malloc(sizeof(无符号短整型)*lsize);
fread(n,sizeof(short int),lsize,arq);
fprintf(输出,“位,量”\n);
对于(i=0x0000;i您正在分配短整数,但正在测量和读取字节。您的数组n
将无法以您想要的方式工作。您需要调整n
到lsize/2
时间(+奇数大小的边缘大小写)并相应地调整循环
你的循环效率也很低!你完全正确!短int是一种2字节的数据类型,所以我的意思是……我认为这是一种正确的方法。因此,我可以理解为什么数组的大小为lsize/2,因为lsize是文件的字节总数。非常感谢你的澄清!我如何改进循环行?好的,dep在结束您正试图执行的操作之前,我将声明一个由65536个整数组成的数组,将它们归零,然后以整数逐个整数的形式读取该文件,并在读取的int的索引处递增该数组。