I\'ve bool arrays of sizes : 32, 48, 64 (each boolean represents a bit). how can I convert them to a number with a good performance( int, unsigned int, double48, double64)?
template
T make_number (bool ar[], size_t ar_size) {
T ret {};
for (size_t i = 0; i < ar_size; ++i) {
T s {ar[i]};
s <<= i;
ret |= s;
}
return ret;
}
int main (int, char**) {
bool ar1[] = {1, 1, 1, 1, 0, 1};
bool ar2[] = {1, 1, 1, 1, 1, 1, 1, 1};
bool ar3[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0};
bool ar4[] = {1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1};
cout << static_cast (make_number (ar1, 6)) << endl;
cout << static_cast (make_number (ar2, 8)) << endl;
cout << make_number (ar3, 16) << endl;
cout << make_number (ar4, 64) << endl;
return 0;
}
And the output:
47
255
32767
18446744073709551615