Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 30.11.2016
Сообщений: 2
1

Объясните смысл кода в 10 строк

30.11.2016, 11:15. Показов 1086. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.

Я знаком с программирование, но пользуюсь скриптовым языком. Он намного проще.
Попытался самостоятельно понять следующий код, и даже примерно понял его.
Но мне нужно не примерное, а точное понимание.
В связи с этим прошу вашей помощи.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
main()
{
    int r, t, len;
    unsigned char buf[64], hash[16], v[5];
    
    t = time(NULL);
    
    srand(t);
    r = rand() % 10000;
 
    len = sprintf(buf, "Q#$Sg5*(^&901(*cm+)97n$PmkjDt^*lx8J+%d%d", r, t);
    MD5(buf, len, hash);
    sprintf(v, "%02x%02x", hash[14], hash[15]);
    
    printf("%s/getpoints/?t=%d&r=%d&v=%s", "/trackingapi", t, r, v);
}
1. объявляются переменные целочисленного типа и переменные типа чар с положительным знаком.
2. определяем текущую дату в секундах
3. обновляем базу в зависимости от текущей даты для rand()
4. r принимает случайное значение от 0 до 9999
Просьба поправить если что не так.

А вот далее у меня трудности в понимании.
1. len принимает значение часла байтов форматированной строки. Но я не смог понять правила форматирования. Просьба помочь в понимании данного форматирования
2. MD5() - не нашел описания данной функции, соответственно не могу понять что и каким образом делает функция.
Понимаю, что формирует хэш строку, но правиа формирования понять не могу
3. получаем форматированную строку. Правильно ли я понимаю, что она записывается в переменную v?
4. формируется строка, где в первый параметр функции подставляются последующие. Правильно ли я понимаю, что %s, %d - это форматы подставляемых значений (строка символов и десятичное значение)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.11.2016, 11:15
Ответы с готовыми решениями:

ОбЪясните смысл кода
Можете объяснить некоторые строчки этого кода. А именно все строчки с Convert.ToInt32. Можно ли их...

Объясните смысл кода
Знатоки, помогите плс разобраться в ситуации. Есть лист со сделками. Сбоку списка сделок список...

Объясните смысл кода.
нашел на просторах интернета такой код: var MainHandle: THandle; begin if Win32Platform =...

Объясните, пожалуйста, смысл кода
do { cin >>a; if (a==0.0) b++; else if (a<0.0) c++; i++; ...

3
53 / 42 / 31
Регистрация: 24.11.2016
Сообщений: 140
30.11.2016, 11:32 2
Цитата Сообщение от mef-t Посмотреть сообщение
len = sprintf(buf, "Q#$Sg5*(^&901(*cm+)97n$PmkjDt^*lx8J+%d%d", r, t);
функция заносит строку и значение двух переменных в массив buf и возвращает в len количество занесенных символов в массив
с другим sprintf'ом тоже самое.
Цитата Сообщение от mef-t Посмотреть сообщение
printf("%s/getpoints/?t=%d&r=%d&v=%s", "/trackingapi", t, r, v);
а здесь printf просто выводит на экран все что после запятой, и да %s, %d, это спецификаторы типов, вместо них буду стоять значения переменных и строки "/trackingapi", t, r, v

сам MD5 не интересовался, но что это такое написано тут
1
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
30.11.2016, 11:50 3
Цитата Сообщение от mef-t Посмотреть сообщение
Но я не смог понять правила форматирования.
Тут на самом деле все не очень сложно. Вообще рекомендую взять за правило в таких случаях делать следующее: выводите сформированные строки на экран, ищите общие части. Если строка на экране представляет собой нечто более сложное чем кусок_форматной_строки+еще_какой_то_обвес, то тогда уже открывайте документацию по форматной функции и анализируйте на предмет наличия работающих управляющих последовательностей и механизма их функционирования в конкретном случае. В вашем конкретном случае их нет, просто к строке справа дошиваются два целых числа. То есть это
C
1
len = sprintf(buf, "Q#$Sg5*(^&901(*cm+)97n$PmkjDt^*lx8J+%d%d", r, t);
эквивалентно
C
1
len = sprintf(buf, "%s%d%d", "Q#$Sg5*(^&901(*cm+)97n$PmkjDt^*lx8J+", r, t);
Чисто от себя, я бы сделал вот так, а автору оригинала дал бы по голове.
Цитата Сообщение от mef-t Посмотреть сообщение
MD5() - не нашел описания данной функции, соответственно не могу понять что и каким образом делает функция.
Исходя из формального названия, она генерирует md-5 хэш от буфера buf с длиной данных len, где hash -- результирующий буфер. То, что именно он является выходным параметром, неочевидным способом следует из того, что он до этого не использовался. Разумеется, это все вилами по воде писано, так как вы справедливо заметили, реализация функции отсутствует в приведенном коде, значит по факту может быть что угодно. Например, функция легко может вообще ничего не делать.
Цитата Сообщение от mef-t Посмотреть сообщение
Правильно ли я понимаю, что она записывается в переменную v?
Да.
Цитата Сообщение от mef-t Посмотреть сообщение
4. формируется строка, где в первый параметр функции подставляются последующие. Правильно ли я понимаю, что %s, %d - это форматы подставляемых значений (строка символов и десятичное значение)
В первый параметр непосредственно ничего не подставляется. Он -- константный (неизменяемый) строковый литерал. На его основе, внутри форматной функции формируется буфер (как правило), уже в который подставляются значения из остальных аргументов в соответствии с форматами. Затем этот буфер или выдается на экран, как в случае с printf, или копируется в строку, как в случае со sprintf. Дальше ход рассуждений у вас верный.
2
0 / 0 / 0
Регистрация: 30.11.2016
Сообщений: 2
30.11.2016, 12:02  [ТС] 4
Всем спасибо.
С MD5 тоже разобрался. Изначально смущал третий (в функции второй) параметр. Но разобрался.
Еще раз спасибо
0
30.11.2016, 12:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2016, 12:02
Помогаю со студенческими работами здесь

Объясните смысл строчки кода
Вот код str.Select(c => c == '1').ToArray() Что она делает?

Объясните смысл строчки кода
Нашёл на хабре чудесный алгоритм карацубы. Вроде как работает хорошо, но мне интересна реализация...

Объясните смысл данного кода
Такой пример: int array; for_each(array, array + 5, (int &p){p = 0;}); cout << array; ...

Объясните построчно смысл кода пожалуйста
import math from operator import * def CalculateDistance(train, test): distance = 0 for i in...

Объясните смысл строк в коде (~20 строк)
#include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; int main() { ...

Объясните, в чем смысл данного куска кода?
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QStandardItemModel> #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru