endian.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #ifndef CONFIG
  2. #define CONFIG "config.h"
  3. #endif // CONFIG
  4. #include CONFIG
  5. #include "endian.h"
  6. #if defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && defined(__LITTLE_ENDIAN) \
  7. && defined(BS16) && defined(BS32) && defined(BS64)
  8. #else // ! defined(__BYTE_ORDER)
  9. void PUT_UAA64BE(void *p, unsigned long long v, unsigned int i)
  10. {
  11. unsigned char *_p = (unsigned char *)&((unsigned long long *)p)[i];
  12. _p[ 0 ] = v >> 56;
  13. _p[ 1 ] = v >> 48;
  14. _p[ 2 ] = v >> 40;
  15. _p[ 3 ] = v >> 32;
  16. _p[ 4 ] = v >> 24;
  17. _p[ 5 ] = v >> 16;
  18. _p[ 6 ] = v >> 8;
  19. _p[ 7 ] = v;
  20. }
  21. void PUT_UAA32BE(void *p, unsigned int v, unsigned int i)
  22. {
  23. unsigned char *_p = (unsigned char *)&((unsigned int *)p)[i];
  24. _p[ 0 ] = v >> 24;
  25. _p[ 1 ] = v >> 16;
  26. _p[ 2 ] = v >> 8;
  27. _p[ 3 ] = v;
  28. }
  29. void PUT_UAA16BE(void *p, unsigned short v, unsigned int i)
  30. {
  31. unsigned char *_p = (unsigned char *)&((unsigned short *)p)[i];
  32. _p[ 0 ] = v >> 8;
  33. _p[ 1 ] = v;
  34. }
  35. void PUT_UAA64LE(void *p, unsigned long long v, unsigned int i)
  36. {
  37. unsigned char *_p = (unsigned char *)&((unsigned long long *)p)[i];
  38. _p[ 0 ] = v;
  39. _p[ 1 ] = v >> 8;
  40. _p[ 2 ] = v >> 16;
  41. _p[ 3 ] = v >> 24;
  42. _p[ 4 ] = v >> 32;
  43. _p[ 5 ] = v >> 40;
  44. _p[ 6 ] = v >> 48;
  45. _p[ 7 ] = v >> 56;
  46. }
  47. void PUT_UAA32LE(void *p, unsigned int v, unsigned int i)
  48. {
  49. unsigned char *_p = (unsigned char *)&((unsigned int *)p)[i];
  50. _p[ 0 ] = v;
  51. _p[ 1 ] = v >> 8;
  52. _p[ 2 ] = v >> 16;
  53. _p[ 3 ] = v >> 24;
  54. }
  55. void PUT_UAA16LE(void *p, unsigned short v, unsigned int i)
  56. {
  57. unsigned char *_p = (unsigned char *)&((unsigned short *)p)[i];
  58. _p[ 0 ] = v;
  59. _p[ 1 ] = v >> 8;
  60. }
  61. unsigned long long GET_UAA64BE(void *p, unsigned int i)
  62. {
  63. unsigned char *_p = (unsigned char *)&((unsigned long long *)p)[i];
  64. return
  65. (unsigned long long)_p[ 0 ] << 56 |
  66. (unsigned long long)_p[ 1 ] << 48 |
  67. (unsigned long long)_p[ 2 ] << 40 |
  68. (unsigned long long)_p[ 3 ] << 32 |
  69. (unsigned long long)_p[ 4 ] << 24 |
  70. (unsigned long long)_p[ 5 ] << 16 |
  71. (unsigned long long)_p[ 6 ] << 8 |
  72. (unsigned long long)_p[ 7 ];
  73. }
  74. unsigned int GET_UAA32BE(void *p, unsigned int i)
  75. {
  76. unsigned char *_p = (unsigned char *)&((unsigned int *)p)[i];
  77. return
  78. (unsigned int)_p[ 0 ] << 24 |
  79. (unsigned int)_p[ 1 ] << 16 |
  80. (unsigned int)_p[ 2 ] << 8 |
  81. (unsigned int)_p[ 3 ];
  82. }
  83. unsigned short GET_UAA16BE(void *p, unsigned int i)
  84. {
  85. unsigned char *_p = (unsigned char *)&((unsigned short *)p)[i];
  86. return
  87. (unsigned short)_p[ 0 ] << 8 |
  88. (unsigned short)_p[ 1 ];
  89. }
  90. unsigned long long GET_UAA64LE(void *p, unsigned int i)
  91. {
  92. unsigned char *_p = (unsigned char *)&((unsigned long long *)p)[i];
  93. return
  94. (unsigned long long)_p[ 0 ] |
  95. (unsigned long long)_p[ 1 ] << 8 |
  96. (unsigned long long)_p[ 2 ] << 16 |
  97. (unsigned long long)_p[ 3 ] << 24 |
  98. (unsigned long long)_p[ 4 ] << 32 |
  99. (unsigned long long)_p[ 5 ] << 40 |
  100. (unsigned long long)_p[ 6 ] << 48 |
  101. (unsigned long long)_p[ 7 ] << 56;
  102. }
  103. unsigned int GET_UAA32LE(void *p, unsigned int i)
  104. {
  105. unsigned char *_p = (unsigned char *)&((unsigned int *)p)[i];
  106. return
  107. (unsigned int)_p[ 0 ] |
  108. (unsigned int)_p[ 1 ] << 8 |
  109. (unsigned int)_p[ 2 ] << 16 |
  110. (unsigned int)_p[ 3 ] << 24;
  111. }
  112. unsigned short GET_UAA16LE(void *p, unsigned int i)
  113. {
  114. unsigned char *_p = (unsigned char *)&((unsigned short *)p)[i];
  115. return
  116. (unsigned short)_p[ 0 ] |
  117. (unsigned short)_p[ 1 ] << 8;
  118. }
  119. unsigned short BE16(unsigned short x)
  120. {
  121. return GET_UAA16BE(&x, 0);
  122. }
  123. unsigned short LE16(unsigned short x)
  124. {
  125. return GET_UAA16LE(&x, 0);
  126. }
  127. unsigned int BE32(unsigned int x)
  128. {
  129. return GET_UAA32BE(&x, 0);
  130. }
  131. unsigned int LE32(unsigned int x)
  132. {
  133. return GET_UAA32LE(&x, 0);
  134. }
  135. unsigned long long BE64(unsigned long long x)
  136. {
  137. return GET_UAA64BE(&x, 0);
  138. }
  139. inline unsigned long long LE64(unsigned long long x)
  140. {
  141. return GET_UAA64LE(&x, 0);
  142. }
  143. #endif // defined(__BYTE_ORDER)