common.h

changeset 29
b4e09ae24bf1
parent 27
15c06a191f9b
child 32
d11a034aabfd
equal deleted inserted replaced
28:fb46d3d40064 29:b4e09ae24bf1
98 } 98 }
99 99
100 return r; 100 return r;
101 } 101 }
102 102
103 template <class T> unsigned char CharByte (T a, unsigned int b) {
104 if (b >= sizeof (T))
105 error ("CharByte: tried to get byte %u out of a %u-byte %s\n",
106 b, sizeof (T), typeid(T).name());
107
108 unsigned long p1 = pow<unsigned long> (256, b);
109 unsigned long p2 = pow<unsigned long> (256, b+1);
110 unsigned long r = (a % p2) / p1;
111
112 if (r > 256)
113 error ("result %lu too big!", r);
114
115 unsigned char ur = static_cast<unsigned char> (r);
116 return ur;
117 }
118
119 #endif // __COMMON_H__ 103 #endif // __COMMON_H__

mercurial