/* shia1.c - Don Yang (uguu.org) 02/17/03 */ #include #include #define BUFSIZE 8192 int main(int argc, char **argv) { unsigned char buffer[BUFSIZE]; int a, i, size, filesize, freq[256]; double p, entropy; FILE *infile; if( argc < 2 ) { printf("%s [...]\n", *argv); } else { for(a = 1; a < argc; a++) { if( (infile = fopen(argv[a], "rb")) ) { for(i = filesize = 0; i < 256; freq[i++] = 0); for(; !feof(infile); filesize += size) { if( !(size = fread(buffer, 1, BUFSIZE, infile)) ) break; for(i = 0; i < size; freq[buffer[i++]]++); } fclose(infile); for(entropy = i = 0; i < 256; i++) if( freq[i] ) { p = freq[i] / (double)filesize; entropy -= p * log(p) / log(2); } printf("%s: %f bits\n", argv[a], entropy); } } } return 0; }