ebml_float.cpp 834 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include "ebml_float.h"
  2. double float_read_ptr_len(uint64_t len, const uint8_t *ptr)
  3. {
  4. // TODO: big endian support
  5. if (len == 4)
  6. {
  7. float val;
  8. uint8_t *dest = (uint8_t *)&val;
  9. dest[3]=ptr[0];
  10. dest[2]=ptr[1];
  11. dest[1]=ptr[2];
  12. dest[0]=ptr[3];
  13. return val;
  14. }
  15. else if (len == 8)
  16. {
  17. double val;
  18. uint8_t *dest = (uint8_t *)&val;
  19. dest[7]=ptr[0];
  20. dest[6]=ptr[1];
  21. dest[5]=ptr[2];
  22. dest[4]=ptr[3];
  23. dest[3]=ptr[4];
  24. dest[2]=ptr[5];
  25. dest[1]=ptr[6];
  26. dest[0]=ptr[7];
  27. return val;
  28. }
  29. else if (len == 10)
  30. {
  31. long double val;
  32. memset(&val, 0, sizeof(val));
  33. uint8_t *dest = (uint8_t *)&val;
  34. dest[9]=ptr[0];
  35. dest[8]=ptr[1];
  36. dest[7]=ptr[2];
  37. dest[6]=ptr[3];
  38. dest[5]=ptr[4];
  39. dest[4]=ptr[5];
  40. dest[3]=ptr[6];
  41. dest[2]=ptr[7];
  42. dest[1]=ptr[8];
  43. dest[0]=ptr[9];
  44. return val;
  45. }
  46. else
  47. return 0;
  48. }