Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [C++] читаем фаил.torrent (https://forum.antichat.xyz/showthread.php?t=146714)

cupper 08.10.2009 19:27

[C++] читаем фаил.torrent
 
Создавал тему в болталке, но там както несложилось. Теперь создаю тут так как код пишу на С++ в linux.

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

Цитата:

pieces: Строка, составленная объединением 20-байтовых значений SHA1-хэшей каждого куска (один кусок — один хэш) (байтовая строка)
Файл торента открываю так
Код:

ifstream ftor (fname.c_str(), ifstream::in);
читаю построчно в цыкле через
Код:

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

Nikituki 08.10.2009 20:26

Цитата:

Сообщение от cupper
идет нечетабельная хрень

Тут подразумеваются непонятные символы?
Быть может байтовые числа просто распознаются как символы?

cupper 08.10.2009 20:32

Цитата:

Сообщение от Nikituki
Тут подразумеваются непонятные символы?
Быть может байтовые числа просто распознаются как символы?

дык я и спрашиваю как сделать чтобы этого не происходило, сам не могу разобраться :(

Nikituki 08.10.2009 20:35

Попробуй конвертировать строку с хеш-суммой в число, например функцией atoi. Кстати, число в строке 16-ричные.

Kraneg 08.10.2009 20:51

Nikituki сударь вы вообще о чем? функция atoi считывает числа в новую переменную до первой буквы, это вообще не преобразования =) даже более скажу к SHA1 это не приемлимо так как смотрим на пример хеша
da39a3ee 5e6b4b0d 3255bfef 95601890 afd80709 )

Nikituki 08.10.2009 20:57

Цитата:

Сообщение от Kraneg
Nikituki сударь вы вообще о чем? функция atoi считывает числа в новую переменную до первой буквы, это вообще не преобразования =)

Согласен, тут я погорячился.
Цитата:

Сообщение от Kraneg
da39a3ee 5e6b4b0d 3255bfef 95601890 afd80709 )

А что мешает разбить строку пробелами на несколько?

Kraneg 08.10.2009 20:59

Nikituki ничего я тут как пример привел неприменимости атои из за выше указанных обстоятелств =)

cupper 08.10.2009 21:04

---------

Nikituki 08.10.2009 21:04

В таком случаем разбиваем строку и юзаем strtol..

cupper 08.10.2009 21:21

маленькая заминка, строл хочет чтобы ей передали строку читабельную, тобишь с нормальными символами. А у меня "нечетабельная хрень" %)

делаю
Код:

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 символов (байт)
и в итоге получаем в консоли
Код:

0
��a�Kލt^L�$��(pc

PS. поправил


Время: 09:24