mirror of
https://github.com/radareorg/radare2.git
synced 2024-12-03 10:51:01 +00:00
35f8f1de0b
- Added documentation for pZ?
42 lines
987 B
C
42 lines
987 B
C
/*
|
|
* This code was done
|
|
* by an anonymous gnome
|
|
* ------------------------
|
|
* That's pure mathematics, so no sense to adding license shit here.
|
|
*/
|
|
|
|
#include <stdlib.h>
|
|
#include <math.h>
|
|
#include "r_types.h"
|
|
|
|
static double get_px(ut8 x, const ut8 *data, ut64 size) {
|
|
ut32 i, count = 0;
|
|
for (i = 0; i < size; i++)
|
|
if (data[i] == x)
|
|
count++;
|
|
return (double)count/size;
|
|
}
|
|
|
|
R_API double r_hash_entropy(const ut8 *data, ut64 size) {
|
|
double h = 0, px, log2;
|
|
unsigned int x;
|
|
|
|
log2 = log ((double)2);
|
|
for (x = 0; x <= 255; x++) {
|
|
px = get_px (x, data, size);
|
|
if (px > 0)
|
|
h += -px * (log (px)/log2);
|
|
}
|
|
return h;
|
|
}
|
|
|
|
R_API double r_hash_entropy_fraction(const ut8 *data, ut64 size) {
|
|
double h = r_hash_entropy(data,size);
|
|
|
|
if (size>255) return h/8;
|
|
else {
|
|
double log2 = log((double)2);
|
|
return h*log2/log(size);
|
|
}
|
|
}
|