1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
static ALPHABET16:&'static[char]=&['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']; pub struct B16<T>(T); pub trait B16Encode<I,O>{ fn encode(data:I)->O; } impl B16Encode<u8,String> for B16<String>{ fn encode(data:u8)->String{ let mut s=String::with_capacity(2); s.push(ALPHABET16[((data>>04)&0b00001111) as usize]); s.push(ALPHABET16[((data>>00)&0b00001111) as usize]); return s; } } impl B16Encode<u16,String> for B16<String>{ fn encode(data:u16)->String{ let mut s=String::with_capacity(4); s.push(ALPHABET16[((data>>12)&0b00001111) as usize]); s.push(ALPHABET16[((data>>08)&0b00001111) as usize]); s.push(ALPHABET16[((data>>04)&0b00001111) as usize]); s.push(ALPHABET16[((data>>00)&0b00001111) as usize]); return s; } } impl B16Encode<u32,String> for B16<String>{ fn encode(data:u32)->String{ let mut s=String::with_capacity(8); s.push(ALPHABET16[((data>>28)&0b00001111) as usize]); s.push(ALPHABET16[((data>>24)&0b00001111) as usize]); s.push(ALPHABET16[((data>>20)&0b00001111) as usize]); s.push(ALPHABET16[((data>>16)&0b00001111) as usize]); s.push(ALPHABET16[((data>>12)&0b00001111) as usize]); s.push(ALPHABET16[((data>>08)&0b00001111) as usize]); s.push(ALPHABET16[((data>>04)&0b00001111) as usize]); s.push(ALPHABET16[((data>>00)&0b00001111) as usize]); return s; } } impl B16Encode<u64,String> for B16<String>{ fn encode(data:u64)->String{ let mut s=String::with_capacity(16); s.push(ALPHABET16[((data>>60)&0b00001111) as usize]); s.push(ALPHABET16[((data>>56)&0b00001111) as usize]); s.push(ALPHABET16[((data>>52)&0b00001111) as usize]); s.push(ALPHABET16[((data>>48)&0b00001111) as usize]); s.push(ALPHABET16[((data>>44)&0b00001111) as usize]); s.push(ALPHABET16[((data>>40)&0b00001111) as usize]); s.push(ALPHABET16[((data>>36)&0b00001111) as usize]); s.push(ALPHABET16[((data>>32)&0b00001111) as usize]); s.push(ALPHABET16[((data>>28)&0b00001111) as usize]); s.push(ALPHABET16[((data>>24)&0b00001111) as usize]); s.push(ALPHABET16[((data>>20)&0b00001111) as usize]); s.push(ALPHABET16[((data>>16)&0b00001111) as usize]); s.push(ALPHABET16[((data>>12)&0b00001111) as usize]); s.push(ALPHABET16[((data>>08)&0b00001111) as usize]); s.push(ALPHABET16[((data>>04)&0b00001111) as usize]); s.push(ALPHABET16[((data>>00)&0b00001111) as usize]); return s; } } pub trait B16Decode<I,O>{ fn decode(data:I)->O; } impl B16Decode<String,u64> for B16<u64>{ fn decode(data:String)->u64{ let mut n=0u64; let b=data.into_bytes(); n|=if b[15]<58 {((b[15]-48) as u64)<<(00)} else {((b[15]-55) as u64)<<(00)}; n|=if b[14]<58 {((b[14]-48) as u64)<<(04)} else {((b[14]-55) as u64)<<(04)}; n|=if b[13]<58 {((b[13]-48) as u64)<<(08)} else {((b[13]-55) as u64)<<(08)}; n|=if b[12]<58 {((b[12]-48) as u64)<<(12)} else {((b[12]-55) as u64)<<(12)}; n|=if b[11]<58 {((b[11]-48) as u64)<<(16)} else {((b[11]-55) as u64)<<(16)}; n|=if b[10]<58 {((b[10]-48) as u64)<<(20)} else {((b[10]-55) as u64)<<(20)}; n|=if b[09]<58 {((b[09]-48) as u64)<<(24)} else {((b[09]-55) as u64)<<(24)}; n|=if b[08]<58 {((b[08]-48) as u64)<<(28)} else {((b[08]-55) as u64)<<(28)}; n|=if b[07]<58 {((b[07]-48) as u64)<<(32)} else {((b[07]-55) as u64)<<(32)}; n|=if b[06]<58 {((b[06]-48) as u64)<<(36)} else {((b[06]-55) as u64)<<(36)}; n|=if b[05]<58 {((b[05]-48) as u64)<<(40)} else {((b[05]-55) as u64)<<(40)}; n|=if b[04]<58 {((b[04]-48) as u64)<<(44)} else {((b[04]-55) as u64)<<(44)}; n|=if b[03]<58 {((b[03]-48) as u64)<<(48)} else {((b[03]-55) as u64)<<(48)}; n|=if b[02]<58 {((b[02]-48) as u64)<<(52)} else {((b[02]-55) as u64)<<(52)}; n|=if b[01]<58 {((b[01]-48) as u64)<<(56)} else {((b[01]-55) as u64)<<(56)}; n|=if b[00]<58 {((b[00]-48) as u64)<<(60)} else {((b[00]-55) as u64)<<(60)}; return n; } } impl B16Decode<String,u32> for B16<u32>{ fn decode(data:String)->u32{ let mut n=0u32; let b=data.into_bytes(); n|=if b[7]<58 {((b[7]-48) as u32)<<(00)} else {((b[7]-55) as u32)<<(00)}; n|=if b[6]<58 {((b[6]-48) as u32)<<(04)} else {((b[6]-55) as u32)<<(04)}; n|=if b[5]<58 {((b[5]-48) as u32)<<(08)} else {((b[5]-55) as u32)<<(08)}; n|=if b[4]<58 {((b[4]-48) as u32)<<(12)} else {((b[4]-55) as u32)<<(12)}; n|=if b[3]<58 {((b[3]-48) as u32)<<(16)} else {((b[3]-55) as u32)<<(16)}; n|=if b[2]<58 {((b[2]-48) as u32)<<(20)} else {((b[2]-55) as u32)<<(20)}; n|=if b[1]<58 {((b[1]-48) as u32)<<(24)} else {((b[1]-55) as u32)<<(24)}; n|=if b[0]<58 {((b[0]-48) as u32)<<(28)} else {((b[0]-55) as u32)<<(28)}; return n; } } impl B16Decode<String,u16> for B16<u16>{ fn decode(data:String)->u16{ let mut n=0u16; let b=data.into_bytes(); n|=if b[3]<58 {((b[3]-48) as u16)<<(00)} else {((b[3]-55) as u16)<<(00)}; n|=if b[2]<58 {((b[2]-48) as u16)<<(04)} else {((b[2]-55) as u16)<<(04)}; n|=if b[1]<58 {((b[1]-48) as u16)<<(08)} else {((b[1]-55) as u16)<<(08)}; n|=if b[0]<58 {((b[0]-48) as u16)<<(12)} else {((b[0]-55) as u16)<<(12)}; return n; } } impl B16Decode<String,u8> for B16<u8>{ fn decode(data:String)->u8{ let mut n=0u8; let b=data.into_bytes(); n|=if b[1]<58 {((b[1]-48) as u8)<<(00)} else {((b[1]-55) as u8)<<(00)}; n|=if b[0]<58 {((b[0]-48) as u8)<<(04)} else {((b[0]-55) as u8)<<(04)}; return n; } }