Это отлично подходит для сред, в которых отсутствует какая-либо операция div, и она всего в 2 раза медленнее, чем собственное деление на моем i7 (оптимизация отключена, естественно).
Вот немного более быстрая версия алгоритма, хотя все еще есть некоторые неприятные ошибки округления с отрицательными числами.
static signed Div10(signed n)
{
n = (n >> 1) + (n >> 2);
n += n < 0 ? 9 : 2;
n = n + (n >> 4);
n = n + (n >> 8);
n = n + (n >> 16);
n = n >> 3;
return n;
}
Так как этот метод предназначен для 32-битной целочисленной точности, вы можете оптимизировать большинство этих сдвигов, если вы работаете в 8-битной или 16-битной среде.
Вы указали info_hash в шестнадцатеричном формате, а не в кодировке URL. Байты хэша SHA-1 должны быть закодированы напрямую, например:
http://torrent.ubuntu.com:6969/file?info_hash=%9A%813%3C%1B%16%E4%A8%3C%10%F3%05%2C%15%90%AA%DF%5E.%20
Кроме того, для URL объявления
обычно требуются некоторые дополнительные параметры, такие как peer_id
.