[C++] читаем фаил.torrent

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by cupper, 8 Oct 2009.

  1. cupper

    cupper Elder - Старейшина

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    Создавал тему в болталке, но там както несложилось. Теперь создаю тут так как код пишу на С++ в linux.

    Вобщем надо разобрать торрентфайл и получить из него хеш сумму файла, тобишь поле pieces. Из спецификации

    Файл торента открываю так
    Code:
    ifstream ftor (fname.c_str(), ifstream::in);
    читаю построчно в цыкле через
    Code:
    getline(ftor, line);
    конкатенирую все считанный строки и вывожу на экран, получаю следующее:
    - В начале идет все как по спецификации все поля их значения в обычном символьном виде.
    - После начала поля pieces: идет нечетабельная хрень
    - В конце опять читабельный строки по спецификации.
    Некак немогу понять как правильно считать чтобы вместо "нечетабельной хрени" получить коректную хешсумму. Или может эту нечетабельную хрень чемто конфертировать надо ?
     
  2. Nikituki

    Nikituki New Member

    Joined:
    14 Mar 2009
    Messages:
    19
    Likes Received:
    3
    Reputations:
    0
    Тут подразумеваются непонятные символы?
    Быть может байтовые числа просто распознаются как символы?
     
  3. cupper

    cupper Elder - Старейшина

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    дык я и спрашиваю как сделать чтобы этого не происходило, сам не могу разобраться :(
     
  4. Nikituki

    Nikituki New Member

    Joined:
    14 Mar 2009
    Messages:
    19
    Likes Received:
    3
    Reputations:
    0
    Попробуй конвертировать строку с хеш-суммой в число, например функцией atoi. Кстати, число в строке 16-ричные.
     
    #4 Nikituki, 8 Oct 2009
    Last edited: 8 Oct 2009
  5. Kraneg

    Kraneg Elder - Старейшина

    Joined:
    30 Aug 2008
    Messages:
    107
    Likes Received:
    97
    Reputations:
    21
    Nikituki сударь вы вообще о чем? функция atoi считывает числа в новую переменную до первой буквы, это вообще не преобразования =) даже более скажу к SHA1 это не приемлимо так как смотрим на пример хеша
    da39a3ee 5e6b4b0d 3255bfef 95601890 afd80709 )
     
  6. Nikituki

    Nikituki New Member

    Joined:
    14 Mar 2009
    Messages:
    19
    Likes Received:
    3
    Reputations:
    0
    Согласен, тут я погорячился.
    А что мешает разбить строку пробелами на несколько?
     
  7. Kraneg

    Kraneg Elder - Старейшина

    Joined:
    30 Aug 2008
    Messages:
    107
    Likes Received:
    97
    Reputations:
    21
    Nikituki ничего я тут как пример привел неприменимости атои из за выше указанных обстоятелств =)
     
  8. cupper

    cupper Elder - Старейшина

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    ---------
     
  9. Nikituki

    Nikituki New Member

    Joined:
    14 Mar 2009
    Messages:
    19
    Likes Received:
    3
    Reputations:
    0
    В таком случаем разбиваем строку и юзаем strtol..
     
  10. cupper

    cupper Elder - Старейшина

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    маленькая заминка, строл хочет чтобы ей передали строку читабельную, тобишь с нормальными символами. А у меня "нечетабельная хрень" %)

    делаю
    Code:
    cout<<strtol(string(STR_SR, 0, 20).c_str(), &err,16)<<endl;
    	cout<<string(STR_SR, 0, 20).c_str()<<"\n";
    STR_SR это "вся нечетабельная хрень, а мы знаем что она состоит из последовательно записанных 20байтовых SHA1 хешсумм, поэтому беремен первый 20 символов (байт)
    и в итоге получаем в консоли
    Code:
    0
    ��a�Kލt^L�$��(pc
    
    PS. поправил
     
    #10 cupper, 8 Oct 2009
    Last edited: 8 Oct 2009
  11. Nikituki

    Nikituki New Member

    Joined:
    14 Mar 2009
    Messages:
    19
    Likes Received:
    3
    Reputations:
    0
    хм.. мб попробовать из файла считывать не в строку, а сразу в int?

    или открывать файл не в обычном режиме, а в двоичном...
     
    #11 Nikituki, 8 Oct 2009
    Last edited: 8 Oct 2009
  12. root_sashok

    root_sashok Elder - Старейшина

    Joined:
    4 Aug 2008
    Messages:
    389
    Likes Received:
    573
    Reputations:
    102
    *.torrent-файлы можно разбирать простым HEX-Editором.
     
  13. cupper

    cupper Elder - Старейшина

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    хорошо, а как в С++ ?
     
  14. click

    click Member

    Joined:
    26 Apr 2009
    Messages:
    114
    Likes Received:
    25
    Reputations:
    0
    libtorrent не умеет, случайно?
     
    1 person likes this.
  15. cupper

    cupper Elder - Старейшина

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    ухты :) а я и незнал что такое есть, над будет глянуть.