11#include <stdint.h>
22int endian_test ()
33{
4- uint32_t sample = {0x01020304 };
4+ int out [3 ] = {0 , -1 , 1 }; // {terrible, little, big} endian
5+ uint32_t sample = {0x02000001 };
56 uint8_t * test = (uint8_t * )& sample ;
6- if (test [0 ] == 4 )
7- return -1 ;
8- else if (test [0 ] == 1 )
9- return 1 ;
10- else
11- return 0 ;
7+ return out [test [0 ]];
128}
139
1410uint16_t oi16 (uint16_t i )
@@ -20,10 +16,12 @@ uint16_t oi16(uint16_t i)
2016 return (i << 8 | i >> 8 );
2117 else
2218 {
23- uint8_t * val = ( uint8_t * ) & i ;
19+ uint16_t sample = { 0x0100 } ;
2420 uint8_t out [2 ];
25- out [0 ] = val [0 ];
26- out [1 ] = val [1 ];
21+ uint8_t * ind = (uint8_t * )& sample ;
22+ uint8_t * val = (uint8_t * )& i ;
23+ for (int j = 0 ; j < 2 ; j ++ )
24+ out [ind [j ]] = val [j ];
2725 return * (uint16_t * )out ;
2826 }
2927}
@@ -39,12 +37,12 @@ uint32_t oi32(uint32_t i)
3937 | i >> 24 );
4038 else
4139 {
42- uint8_t * val = ( uint8_t * ) & i ;
40+ uint32_t sample = { 0x03020100 } ;
4341 uint8_t out [4 ];
44- out [ 0 ] = val [ 0 ] ;
45- out [ 1 ] = val [ 1 ] ;
46- out [ 2 ] = val [ 2 ];
47- out [3 ] = val [3 ];
42+ uint8_t * ind = ( uint8_t * ) & sample ;
43+ uint8_t * val = ( uint8_t * ) & i ;
44+ for ( int j = 0 ; j < 4 ; j ++ )
45+ out [ind [ j ]] = val [j ];
4846 return * (uint32_t * )out ;
4947 }
5048}
@@ -64,16 +62,12 @@ uint64_t oi64(uint64_t i)
6462 | i >> 56 );
6563 else
6664 {
67- uint8_t * val = ( uint8_t * ) & i ;
65+ uint64_t sample = { 0x0706050403020100 } ;
6866 uint8_t out [8 ];
69- out [0 ] = val [0 ];
70- out [1 ] = val [1 ];
71- out [2 ] = val [2 ];
72- out [3 ] = val [3 ];
73- out [4 ] = val [4 ];
74- out [5 ] = val [5 ];
75- out [6 ] = val [6 ];
76- out [7 ] = val [7 ];
67+ uint8_t * ind = (uint8_t * )& sample ;
68+ uint8_t * val = (uint8_t * )& i ;
69+ for (int j = 0 ; j < 8 ; j ++ )
70+ out [ind [j ]] = val [j ];
7771 return * (uint64_t * )out ;
7872 }
7973}
0 commit comments