Guest User

Untitled

a guest
Jul 15th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.97 KB | None | 0 0
  1. #define SIZE_OF_ARRAY(x) ((sizeof(x))/(sizeof(x[0])))
  2.  
  3. typedef union
  4. {
  5. uint32_t bit32;
  6. double_t varDbl;
  7. }entropy_var_t;
  8.  
  9. static double_t get_entropy(uint8_t const * p_src, size_t const buffer_size)
  10. {
  11. double_t ret_val = 0;
  12. entropy_var_t bins[UINT8_MAX];
  13.  
  14. memset(bins, 0, sizeof(bins));
  15.  
  16. /* Count occurance of each byte */
  17. for(uint32_t itr = 0; itr < buffer_size; itr++)
  18. {
  19. bins[p_src[itr]].bit32+=1;
  20. }
  21.  
  22. for(uint32_t itr = 0; itr < SIZE_OF_ARRAY(bins); itr++)
  23. {
  24. bins[itr].varDbl = (double_t)bins[itr].bit32/(double_t)buffer_size;
  25.  
  26. if(bins[itr].varDbl > 0.0)
  27. {
  28. double_t log2p_i = log2(bins[itr].varDbl);
  29. ret_val = ret_val + (bins[itr].varDbl * log2p_i);
  30. }
  31. }
  32.  
  33. return -ret_val;
  34. }
  35.  
  36. void test(void)
  37. {
  38.  
  39. uint8_t test_string[] =
  40. {
  41. 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
  42. 0x0B, 0x0B,
  43. 0x0C,
  44. 0x0D,
  45. 0x0E
  46. };
  47.  
  48. double_t test_entropy = get_entropy(&test_string[0], SIZE_OF_ARRAY(test_string));
  49.  
  50. return;
  51. }
Add Comment
Please, Sign In to add comment