Или как работать с большими числами в бинарном формате.
Понадобилось мне вобщем обработать бинарные числа такого вида

894B645E89E1535BBDAD5B8B290650530801B18EBFBF5E8FAB3C82872A3E9BB7

Я тут репу почесал ну и вобщем решил по шерстить интернет никто ничего толково не пишит решил сам разбираться. Результатом моих компаний в документации был такой:

1
2
3
4
5
6
7
8
9
10
11
12
13
num = "894B645E89E1535BBDAD5B8B290650530801B18EBFBF5E8FAB3C82872A3E9BB7"
def hex_to_string(s):
strN=''
for i in range(0,len(s),2):
strN=strN+chr(int(s[i:i+2],16))
return strN
def string_to_long(s):
r = 0L
for c in s:
r = ( r << 8 ) + ord(c)
return r
num = string_to_long(hex_to_string(num))
print num

результат вот такое вот число

62100066509156017342069496140902949863249758336000796928566441170293728648119

А теперь скажите мне что это можно сделать в другом языке также просто как на Python-е я так думаю врядли такое возможно потомучто я пробовал паскаль FPC (Free Pascal Compiler) и Дельфи там для этого нужно какието модули сторонние искать на Си это можно сделать с помощью библиотеки openssl но она тоже вешает пару мегабайт а на VB тоже надо библиотеку(dll) которая вешает гдето мегабайт.
Не один из языков вот так вот просто не позволял сделать преобразование 16-ого бинарного числа. У меня кстате есть библиотечка которую я сам писал для работы с BigInteger можно преобразовывать как в бинарный(16-ный формат) так и обратно в десятичный. В Python-е нет ограничения на размер числа все упирается только в размер памяти я думаю это вообще супер решение, когда язык позволяет работать с любыми данными не ограничивая их размер.
Для чего это мне нужно было спросите вы? Я отвечу для работы с протоколом шифрования SRP-6. Который применяется для авторизации клиента WoW на сервере. Используя созданную мной библиотеку я написал Логин сервер для World of Warcraft 1.12.1 на Python-е. Пока это только скелет программы умеющий общаться с MySQL-сервером и проводить авторизацию клиента. Но я так думаю что всором времени я доведу работу над ним до логического конца и возьмусь писать уже игровой сервер для WoW. :)

5 ответов в “BigInteger в Python”
  1. -Torin- ответил:

    Интересно было почитать блог, спасибо. Тут нашел свои любимые темы: эмуляторы wow, питон, линукс ))
    Своими успехами в программировании похвастаться пока не могу. Только учусь но времени нехватает катастрофически.

    Хотелось бы взглянуть на ваш код логин-сервера wow. Да и вообще интересно, как продвигается дело с эмулятором сервера. С 22 марта много времени утекло. Предполагаю что дело с написанием эмулятора остановилось? Если да то в чем были трудности? Опишите, если не в тягость.. Тема разработки эмулятора wow полностью на питоне меня очень интерисует.

  2. Евгений Фомин ответил:

    Собсвенно тоже мала времени, ребенок много времени отбирает. А насчет логин сервер WoW так он остался на стадии последнего шага надо еще кой что подкрутит образно говоря. Насчет взглянуть на код наверное не получится оч уж не хочется распространять поделку которая не доведена до финальной точки. Простите уж :) На вопросы отвечу. Если надо могу описать прямо в блоге как работает программа.

  3. -Torin- ответил:

    >Если надо могу описать прямо в блоге как работает программа.

    Да, это было бы очень интересно. Есть большое желание писать эмулятор именно на питоне.. В обозримом будущем :)
    Язык нравится, и это хорошая практика. Конечно, понимаю что простого в этом ничего нет. Многие стали бы отговаривать от этой задумки. Но мне нравится сам процесс «возни» с эмулятором.. В принципе, любая информация по этому поводу будет полезна. Спасибо.

  4. Евгений Фомин ответил:

    Хорошо в ближайшее время напишу. :)

  5. Евгений Фомин ответил:

    Логин сервер WoW написан!!! Все работает в ближайше будущее я пошагово опишу что и как делалось! Кстате написан он был месяца 2 назад!!! Извиняюсь за задержку. Много наволилось в реальной жизни!

Теперь у меня есть персональная страница на Я.ру — theblackravan!

Я.ру - это новый сервис Яндекса, на котором делятся с друзьями самым интересным, знакомятся, дружат или ссорятся, вывешивают фотки, комментируют свои, чужие записи, обмениваются ссылками и рассказывают о своем настроении.