1 #include <u.h> 2 #include <libc.h> 3 #include <bio.h> 4 #include <mach.h> 5 6 /* 7 * big-endian short 8 */ 9 u16int beswap2(u16int s)10beswap2(u16int s) 11 { 12 uchar *p; 13 14 p = (uchar*)&s; 15 return (p[0]<<8) | p[1]; 16 } 17 18 /* 19 * big-endian long 20 */ 21 u32int beswap4(u32int l)22beswap4(u32int l) 23 { 24 uchar *p; 25 26 p = (uchar*)&l; 27 return (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3]; 28 } 29 30 /* 31 * big-endian vlong 32 */ 33 u64int beswap8(u64int v)34beswap8(u64int v) 35 { 36 uchar *p; 37 38 p = (uchar*)&v; 39 return ((u64int)p[0]<<56) | ((u64int)p[1]<<48) | ((u64int)p[2]<<40) 40 | ((u64int)p[3]<<32) | ((u64int)p[4]<<24) 41 | ((u64int)p[5]<<16) | ((u64int)p[6]<<8) 42 | (u64int)p[7]; 43 } 44 45 /* 46 * little-endian short 47 */ 48 u16int leswap2(u16int s)49leswap2(u16int s) 50 { 51 uchar *p; 52 53 p = (uchar*)&s; 54 return (p[1]<<8) | p[0]; 55 } 56 57 /* 58 * little-endian long 59 */ 60 u32int leswap4(u32int l)61leswap4(u32int l) 62 { 63 uchar *p; 64 65 p = (uchar*)&l; 66 return (p[3]<<24) | (p[2]<<16) | (p[1]<<8) | p[0]; 67 } 68 69 /* 70 * little-endian vlong 71 */ 72 u64int leswap8(u64int v)73leswap8(u64int v) 74 { 75 uchar *p; 76 77 p = (uchar*)&v; 78 return ((u64int)p[7]<<56) | ((u64int)p[6]<<48) | ((u64int)p[5]<<40) 79 | ((u64int)p[4]<<32) | ((u64int)p[3]<<24) 80 | ((u64int)p[2]<<16) | ((u64int)p[1]<<8) 81 | (u64int)p[0]; 82 } 83 84 u16int leload2(uchar * b)85leload2(uchar *b) 86 { 87 return b[0] | (b[1]<<8); 88 } 89 90 u32int leload4(uchar * b)91leload4(uchar *b) 92 { 93 return b[0] | (b[1]<<8) | (b[2]<<16) | (b[3]<<24); 94 } 95 96 u64int leload8(uchar * b)97leload8(uchar *b) 98 { 99 return leload4(b) | ((uvlong)leload4(b+4) << 32); 100 } 101 102 u16int beload2(uchar * b)103beload2(uchar *b) 104 { 105 return (b[0]<<8) | b[1]; 106 } 107 108 u32int beload4(uchar * b)109beload4(uchar *b) 110 { 111 return (b[0]<<24) | (b[1]<<16) | (b[2]<<8) | b[3]; 112 } 113 114 u64int beload8(uchar * b)115beload8(uchar *b) 116 { 117 return ((uvlong)beload4(b) << 32) | beload4(b+4); 118 } 119