plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

swap.c (1551B)


      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
     10 beswap2(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
     22 beswap4(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
     34 beswap8(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
     49 leswap2(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
     61 leswap4(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
     73 leswap8(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
     85 leload2(uchar *b)
     86 {
     87 	return b[0] | (b[1]<<8);
     88 }
     89 
     90 u32int
     91 leload4(uchar *b)
     92 {
     93 	return b[0] | (b[1]<<8) | (b[2]<<16) | (b[3]<<24);
     94 }
     95 
     96 u64int
     97 leload8(uchar *b)
     98 {
     99 	return leload4(b) | ((uvlong)leload4(b+4) << 32);
    100 }
    101 
    102 u16int
    103 beload2(uchar *b)
    104 {
    105 	return (b[0]<<8) | b[1];
    106 }
    107 
    108 u32int
    109 beload4(uchar *b)
    110 {
    111 	return (b[0]<<24) | (b[1]<<16) | (b[2]<<8) | b[3];
    112 }
    113 
    114 u64int
    115 beload8(uchar *b)
    116 {
    117 	return ((uvlong)beload4(b) << 32) | beload4(b+4);
    118 }