我正在做一个读取整个二进制文件的程序(在我的例子中是一张图片),读取2 x 2字节并打印文件中出现的每个字节(从0000h到FFFFh)的次数,但是我有关于我捕获的零数量的问题。不确切知道它是否是一个常见的情况,但我觉得通过分配数组会出现问题。有类似的东西:
比特发生
0 62354
1 13
2 4
3 5
4 2
5 2
6 0
7 2
。
。
65535 0
你们认为我做错了什么?
按照代码:
#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;
}
答案 0 :(得分:0)
您正在分配短暂的投注,但是测量&amp;读字节。您的数组n
将无法以您希望的方式运行。您需要将n
的大小设置为lsize/2
次(+奇数大小的边缘大小写)并相应地调整您的循环。
你的循环也非常低效!