1 /*****************************************************************************/ 2 /* */ 3 /* CPUCVT.CC */ 4 /* */ 5 /* (C) 1993-96 Ullrich von Bassewitz */ 6 /* Wacholderweg 14 */ 7 /* D-70597 Stuttgart */ 8 /* EMail: uz@ibb.schwaben.com */ 9 /* */ 10 /*****************************************************************************/ 11 12 13 14 // $Id$ 15 // 16 // $Log$ 17 // 18 // 19 20 21 22 // This file contains code to convert to and from little endian data types 23 // into the native format. 24 25 26 27 #include "cpucvt.h" 28 29 30 31 /*****************************************************************************/ 32 /* Code */ 33 /*****************************************************************************/ 34 35 36 37 #ifdef CPU_BIG_ENDIAN 38 39 40 ToLittleEndian(i16 & X)41void ToLittleEndian (i16& X) 42 { 43 X = ((X << 8) & 0xFF00) | 44 ((X >> 8) & 0x00FF); 45 } 46 47 48 ToLittleEndian(i32 & X)49void ToLittleEndian (i32& X) 50 { 51 X = ((X >> 24) & 0x000000FF) | 52 ((X >> 8) & 0x0000FF00) | 53 ((X << 8) & 0x00FF0000) | 54 ((X << 24) & 0xFF000000); 55 } 56 57 58 ToLittleEndian(u16 & X)59void ToLittleEndian (u16& X) 60 { 61 X = ((X << 8) & 0xFF00) | 62 ((X >> 8) & 0x00FF); 63 } 64 65 66 ToLittleEndian(u32 & X)67void ToLittleEndian (u32& X) 68 { 69 X = ((X >> 24) & 0x000000FF) | 70 ((X >> 8) & 0x0000FF00) | 71 ((X << 8) & 0x00FF0000) | 72 ((X << 24) & 0xFF000000); 73 } 74 75 76 ToLittleEndian(_double & X)77void ToLittleEndian (_double& X) 78 { 79 // Swap the longs 80 u32 Tmp = X.I [0]; 81 X.I [0] = X.I [1]; 82 X.I [1] = Tmp; 83 84 // Swap the bytes inside the longs 85 ToLittleEndian (X.I [0]); 86 ToLittleEndian (X.I [1]); 87 } 88 89 90 FromLittleEndian(i16 & X)91void FromLittleEndian (i16& X) 92 { 93 X = ((X << 8) & 0xFF00) | 94 ((X >> 8) & 0x00FF); 95 } 96 97 98 FromLittleEndian(i32 & X)99void FromLittleEndian (i32& X) 100 { 101 X = ((X >> 24) & 0x000000FF) | 102 ((X >> 8) & 0x0000FF00) | 103 ((X << 8) & 0x00FF0000) | 104 ((X << 24) & 0xFF000000); 105 } 106 107 108 FromLittleEndian(u16 & X)109void FromLittleEndian (u16& X) 110 { 111 X = ((X << 8) & 0xFF00) | 112 ((X >> 8) & 0x00FF); 113 } 114 115 116 FromLittleEndian(u32 & X)117void FromLittleEndian (u32& X) 118 { 119 X = ((X >> 24) & 0x000000FF) | 120 ((X >> 8) & 0x0000FF00) | 121 ((X << 8) & 0x00FF0000) | 122 ((X << 24) & 0xFF000000); 123 } 124 125 126 FromLittleEndian(_double & X)127void FromLittleEndian (_double& X) 128 { 129 // Swap the longs 130 u32 Tmp = X.I [0]; 131 X.I [0] = X.I [1]; 132 X.I [1] = Tmp; 133 134 // Swap the bytes inside the longs 135 FromLittleEndian (X.I [0]); 136 FromLittleEndian (X.I [1]); 137 } 138 139 140 141 #endif 142 143