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