1
我正在使用OpenSSL的BIGNUM庫處理任意精度數字。儘快使用OpenSSL的BIGNUM分割數字
我需要分成兩部分的數字。我需要一個數字中的前n位[0,n-1](我的意思是n個最低有效位),其餘位中的[n,end]位於另一個數中。
我有一個做工程的代碼是這個
void number_split(BIGNUM * first_n_bits, BIGNUM * the_rest, BIGNUM * number, long n) {
int i = 0;
BN_copy(first_n_bits, number);
int bits = BN_num_bits(first_n_bits);
while(bits > n) {
BN_clear_bit(first_n_bits, --bits);
}
if(BN_num_bits(number) > n) {
BN_rshift(the_rest, number, n);
} else {
BN_copy(the_rest, zero);
}
}
我已經確定,這個功能是最大的貢獻者我的應用程序的執行時間之一,所以使得它快一點會幫助我很多。
似乎可以改進的部分是while
循環,我一次清除最重要的位。我會認爲BIGNIM會有更高效完成的功能,但我找不到它。
那麼,我能做些什麼來使這個更快?
一個小的變化,以您的解決方案,'BN_mask_bits'確實NUM的到位修改,它不把結果像'BN_rshift'這樣的新結構可以。所以,你必須首先將'num'複製到'low_bits'中,然後掩飾'low_bits' – Luke
謝謝!這很好!我的應用程序的淨速度提高了33%。 – Luke
@Luke,哦是的 - 我更新了我的答案,在'BN_mask_bits()'之前使用'BN_copy()'。很高興聽到它的幫助! –