unsigned long array_to_integer (unsigned char *arr, int size, int bigendian) {
- unsigned long val = 0, mask = 1;
+ unsigned long val = 0;
int i;
if (bigendian) {
int j;
for (i = size, j = 0; i > 0; i--, j++) {
-
- mask *= (UCHAR_MAX + 1);
- val |= arr[j] << (CHAR_BIT * (i - 1));
-
+ val |= (unsigned long) arr[j] << (CHAR_BIT * (i - 1));
}
} else {
for (i = 0; i < size; i++) {
-
- mask *= (UCHAR_MAX + 1);
- val |= arr[i] << (CHAR_BIT * i);
-
+ val |= (unsigned long) arr[i] << (CHAR_BIT * i);
}
}
- return val & (mask - 1);
+ return val;
}