我需要创建一个用 C 实现的算法,该算法在任意数量的字节和一个字节之间进行模运算。看到这个:
typedef struct{
u_int8_t * data;
u_int16_t length;
}UBigInt;
u_int8_t UBigIntModuloWithUInt8(UBigInt a,u_int8_t b){
}
对于 2 的幂,可以使用 a & (b-1),但是非 2 的幂呢?
我意识到一种方法是:a - b*(a/b)
这将需要使用 UBigIntDivisionWithUInt8 和 UBigIntMultiplicationWithUInt8 和 UBigIntSubtractionWithUBigInt。可能有更有效的方法来做到这一点?
谢谢你。
这是我现在拥有的实现:
u_int8_t UBigIntModuloWithUInt8(UBigInt a,u_int8_t b){
if (!(b & (b - 1)))
return a.data[a.length - 1] & b - 1; // For powers of two this can be done
// Wasn't a power of two.
u_int16_t result = 0; // Prevents overflow in calculations
for(int x = 0; x < a.length; x++) {
result *= (256 % b);
result %= b;
result += a.data[x] % b;
result %= b;
}
return result;
}