00001 #include "byteswap.h" 00002 #include "xmem.h" 00003 00004 #define SWAP(a,b) {char tmp; tmp = a; a = b; b = tmp;} 00005 00006 00007 void byteswap(int size, int n, char *val) 00008 { 00009 int i,j; 00010 char *p; 00011 00012 if (size==1) 00013 return; 00014 00015 p = val; 00016 switch(size) 00017 { 00018 case 2: 00019 for (i=0; i<n; i++) 00020 { 00021 SWAP(*p, *(p+1)); 00022 p+=2; 00023 } 00024 break; 00025 case 4: 00026 for (i=0; i<n; i++) 00027 { 00028 SWAP(*p, *(p+3)); 00029 SWAP(*(p+1), *(p+2)); 00030 p+=4; 00031 } 00032 break; 00033 case 8: 00034 for (i=0; i<n; i++) 00035 { 00036 SWAP(*p, *(p+7)); 00037 SWAP(*(p+1), *(p+6)); 00038 SWAP(*(p+2), *(p+5)); 00039 SWAP(*(p+3), *(p+4)); 00040 p+=8; 00041 } 00042 break; 00043 default: 00044 for (j=0;j<n;j++) 00045 { 00046 for(i=0;i<(size/2);i++) 00047 SWAP(*(p+i), *(p+size-i)); 00048 p += size; 00049 } 00050 break; 00051 } 00052 } 00053 00054 #undef SWAP