Где же собственно распространяется открыто алгоритм генерации $key - ответа на $lock? Искал, искал, не нашел.
Если есть выбор мне на C#. Но могу перевести с любого другого языка\описания
http://mydc.ru/index.html?showtopic=915&view=findpost&p=19477
Спасибо за ответ Наваял на C# вставьте в фак, может кому пригодится. И было бы совсем хорошо если бы в описании протокола в постах про $lock и $key была ссылка на пост с функциями.
Еще раз спасибо за помощь
А где описание функции Encoding.ASCII.GetString ?
Там же где и всегда, в MSDN
Внес коррективы. не надо делать byte[] arr_key = new byte[str_lock.Length+1];
Это приводит к тому что последний символ получается пустой. Исправил. Кстати эта ошибка из сишной функции переехала, я с ней сверял результат. Думал так и положено что в конце ноль.
В языке си переменная типа char* всегда оканчивается символом \0.
Что касается написанной функции, то я не уверен в том, что она всегда будет работать правильно, так как в ней отсутствует функция DCN экранирования. Собственно поэтому я и просил привести описание функции Encoding.ASCII.GetString, надеясь что в описании этой функции есть DCN экранирование.
Что значит не всегда? И что значит задирать строку?
Прочитай что я написал. Я говорю про конкретный тип char*.
Библиотека string содержит не столько тип, как целый класс для работы со строками и естественно в строке типа string отсутствует на конце символ \0. Причина этому то, что в строках string есть функция для возвращения длины строки, что нельзя сказать о типе char*, где символ \0 на конце и указывает нам где заканчивается строка, и всё что следует за этим символом является мусором, который может остаться от предыдущих строк в данном буфере.
Поэтому прекращай оффтопить
>И что значит забирать строку?
Selffix
>char*
мне тебе пример накатать? =) Не уж то и поспорить нельзя, если ты делаешь спорные утверждения?
В C# строки не требуют нультерминирования. Это же не последовательность байт, как в Си или Делфи, а объект, который сам о себе позаботится. Посему он символ \0 считает частью строки и вместе со всеми отправляет серверу, что не гуд, т.к. сервер этот символ не переваривает и обижается. Поэтому для С# +1 в размере создаваемого массива ставить нельзя.
По поводу DCN экранирования, это что? Выборка яндекса мне ничего не дала.
По NMDC протоколу символы с кодами 0, 5, 36, 96, 124 и 126 должны быть заменены, соответственно, на /%DCN000%/, /%DCN005%/, /%DCN036%/, /%DCN096%/, /%DCN124%/ и /%DCN126%/.