Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

нужна небольшая помощь знающих С++

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> нужна небольшая помощь знающих С++
Имя
Сообщение << Старые топики   Новые топики >>
нужна небольшая помощь знающих С++ - 2012-01-15 12:16:17.926666   
shkolote attake

Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
допустим есть массив 1;2;3;4;5…..
нужно сделать массив 12;34;56….
как бы соединить первые два вторые два элемента и т.д. чтобы первые два уже были первым элементом другого массива,вторые два вторым и тд
массив char
Post #: 1
RE: нужна небольшая помощь знающих С++ - 2012-01-15 14:02:00.356666   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
То есть, тебе надо сделать массив строк вида: "12", "34", "56", …? Тут два вопроса: первый как выделить память, второй как собственно сделать. С первым я бы решил так:int len = strlen(src); char *place = malloc(len * 3 / 2); /* на каждые два байта исходного массива, нам понадобится три байта нового */ char **dst = malloc(len * sizeof(char*)); /* массив указателей на строчки в place */ int i, j; for(i = 0, j = 0; i &lt; len; i += 2, j += 3) { dst[i] = place + j; dst[0] = src[0]; dst[1] = src[1]; dst[2] = '\0'; }
Post #: 2
RE: нужна небольшая помощь знающих С++ - 2012-01-15 17:45:27.816666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
for ( i = 0; i &lt; n; i+= 2 ) b[ i / 2 ] = a[i] * 10 + a[i + 1]; Но не забывай про переполнение типов. Я бы делал массивы хотя-бы int-ами.
Post #: 3
RE: нужна небольшая помощь знающих С++ - 2012-01-15 17:49:52.120000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
for ( i = 0; i &lt; n; i+= 2 ) b[ i / 2 ] = a[i] * 10 + a[i + 1]; Но не забывай про переполнение типов. Я бы делал массивы хотя-бы int-ами.
Post #: 4
RE: нужна небольшая помощь знающих С++ - 2012-01-15 18:02:38.186666   
shkolote attake

Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
начну сначала тема (уже поднималась)  у меня хеш записан как чар массив получается что весит он 32 байта…мне нужно отправить серверу хеш в виде 16 байт
сделал сначала так
int count=32; //ðàçìåð ìàññèâà 1 char *second_array=new char[16]; int j=0; for(int n=0;n&lt;32;n+=2){ second_array[j]=heashkey[n] + heashkey[n+1]; j++; } cout&lt;&lt;second_array; получилась херня полная.
Вот сча решил делать что то в виде этого
int HextoDec(char *hex) { ....... &nbsp; } int xstrtoi(char *hex)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // hex string to int { &nbsp;&nbsp;&nbsp; ...... } int n; char bytes[16]={0}; for (n = 0; n &lt;32; n += 2) { bytes[n / 2] = xstrtoi(heashkey[n]) * 16 + xstrtoi(heashkey[n + 1]); пока код только в набросках делаю…..думал быстренько сделаю, оказалось нет)))
Post #: 5
RE: нужна небольшая помощь знающих С++ - 2012-01-15 19:03:33.846666   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
int xtoi(char c) { c = tolower(c); if(c &gt;= '0' || c &lt;= '9') return c - '0'; else if(c &gt;= 'a' && c &lt;= 'f') return c - 'a'; else return -1; } int hexstr_to_bin(char *str) { int i, j; for(i = 0, j = 0; str[i] != '\0' && str[i+1] != '\0'; i+=2, j++) str[j] = xtoi(str[i]) * 16 + xtoi(str[i + 1]); return j; }
Post #: 6
RE: нужна небольшая помощь знающих С++ - 2012-01-16 04:20:25.750000   
shkolote attake

Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
два вопроса:
1.почему функция hexstr_to_bin возвращает j?
2.и прежде чем передать число в функцию hexstr_to_bin и сосчитать сумму надо ведь его не просто в интовое значение перевести но и в десятичную систему?(вроде правильно говорю..)а после сложения опять перевести в шестнадцатитричную?
по моему так….
Post #: 7
RE: нужна небольшая помощь знающих С++ - 2012-01-16 17:09:37.406666   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: shkolote attake
два вопроса:
1.почему функция hexstr_to_bin возвращает j?

Количество байт в результате.
quote:

ORIGINAL: shkolote attake
2.и прежде чем передать число в функцию hexstr_to_bin и сосчитать сумму надо ведь его не просто в интовое значение перевести но и в десятичную систему?(вроде правильно говорю..)а после сложения опять перевести в шестнадцатитричную?

десятичная… десятеричная… это называется путаница в мозгах. десятичное и шестнадцатеричное представления – это для человека. Это когда хочется int на экране напечатать. Компьютер работает с int'ом. И в большинстве ситуаций вообще не надо думать о том, в какой системе счисления работает int. Просто int – это число, а как оно записывается – это дело компьютера, а не наше. Да хоть в троичной уравновешенной, нам-то какое дело? Задачи типа "перевести из десятичной в шестнадцатеричную", на самом то деле, сводятся к тому, что из десятичной (из ascii представления цифрами) число переводится во внутреннее представление, а затем из внутреннего представления в шестнадцатеричную – опять же ascii представление цифрами. Здесь же, нам именно что нужно – это внутреннее представление. Массив однобайтовых чисел – char'ов.

Я перевожу из шестнадцатеричного ascii представления в int. Ну, точнее в unsigned char… Кстати… Там на этом фоне могут возникнуть ошибки приведения типов. Вроде не должны, но… Для убеждённости лучше объявить hexstr_to_bin так:int hexstr_to_bin(unsigned char *str)Хотя это может быть не удобно для клиентского кода, но тогда делать так:int hexstr_to_bin(char *src) { unsigned char *str = (unsigned char*)src; /*... далее всё остаётся неизменным. */ }
Post #: 8
RE: нужна небольшая помощь знающих С++ - 2012-01-16 19:48:10.340000   
shkolote attake

Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
вопрос такой у тебя xtoi неправильно считаетзначение символов если это буква
я думаю надо как то так
int xtoi(char c) { c = tolower(c); if(c &gt;= '0' || c &lt;= '9') return c - '0'; else if(c &gt;= 'a' &amp;&amp; c &lt;= 'f') return 10+ c - 'a'; else return -1; } но что то непомогает
Post #: 9
RE: нужна небольшая помощь знающих С++ - 2012-01-17 22:55:26.326666   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: shkolote attake

вопрос такой у тебя xtoi неправильно считаетзначение символов если это буква
я думаю надо как то так
int xtoi(char c) { c = tolower(c); if(c &gt;= '0' || c &lt;= '9') return c - '0'; else if(c &gt;= 'a' && c &lt;= 'f') return 10+ c - 'a'; else return -1; }

Точно.

quote:

ORIGINAL: shkolote attake
но что то непомогает
Значит берёшь отладчик и проверяешь отладчиком. Шаг за шагом. Как два ascii символа конвертируются в байт, и куда этот байт кладётся. Тут другого пути нету.
Post #: 10
RE: нужна небольшая помощь знающих С++ - 2012-01-18 17:57:43.196666   
shkolote attake

Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
нет проблема даже в переводе одного чар символа в инт…мой вариант тоже буквы не правильно переводит…только цифры норм…
Post #: 11
RE: нужна небольшая помощь знающих С++ - 2012-01-18 19:14:43.703333   
shkolote attake

Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
реализовал вот так и всё заработало проблема ещё в условии была || надо &&…всегда условие выполнялось
int xtoi(char c) { &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (c &gt;= '0' &amp;&amp; c &lt;= '9') return c - '0'; if (c &gt;= 'A' &amp;&amp; c &lt;= 'F') return 10 + c - 'A'; if (c &gt;= 'a' &amp;&amp; c &lt;= 'f') return 10 + c - 'a'; return -1; }
Post #: 12
RE: нужна небольшая помощь знающих С++ - 2012-01-18 20:06:28.056666   
shkolote attake

Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
вот реализовал ура!!!!на выходе получаю массив[16] из интовых чисел в десятичной системе сча надо их обратно преобразовать в хекс и в чар и передать серверу((
int xtoi(char c) { &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (c &gt;= '0' &amp;&amp; c &lt;= '9') return c - '0'; if (c &gt;= 'A' &amp;&amp; c &lt;= 'F') return 10 + c - 'A'; if (c &gt;= 'a' &amp;&amp; c &lt;= 'f') return 10 + c - 'a'; return -1; } int hexstr_to_bin(char *str) { int b[16]={0}; &nbsp;&nbsp;&nbsp; int n, j; &nbsp;&nbsp;&nbsp; for(n = 0, j = 0; str[n] != '\0' &amp;&amp; str[n+1] != '\0'; n+=2, j++){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b[j] = xtoi(str[n]) * 16 + xtoi(str[n + 1]); &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf( "%i\n", b[j] );} &nbsp;&nbsp;&nbsp; return b[j]; }
Post #: 13
RE: нужна небольшая помощь знающих С++ - 2012-01-19 18:39:55.060000   
shkolote attake

Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
пытаюсь сделать перевод как то так но выдаёт фигню
int* hexstr_to_bin(char *str) { &nbsp;&nbsp;&nbsp; int n, j; &nbsp;&nbsp;&nbsp; char buffer[1]; &nbsp;&nbsp;&nbsp; char mass[16]; &nbsp;&nbsp;&nbsp; int b[16]; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(n = 0, j = 0; str[n] != '\0' &amp;&amp; str[n+1] != '\0'; n+=2, j++){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b[j] = xtoi(str[n]) * 16 + xtoi(str[n + 1]); &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf( "%i\n", b[j] ); &nbsp;&nbsp;&nbsp; &nbsp; itoa (b[j],buffer,16); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mass[j]=buffer[1]; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf("%s\n",buffer); &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf("%s\n",mass[j]); &nbsp;&nbsp;&nbsp; } cout&lt;&lt;mass; &nbsp;&nbsp;&nbsp; return b; причём значение buffer выдаёт правильно..как только засунуть значения в массив?
Post #: 14
RE: нужна небольшая помощь знающих С++ - 2012-01-20 12:24:41.270000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Опиши на человеческом (техническом) языке формат входных и выходных данных.
Post #: 15
RE: нужна небольшая помощь знающих С++ - 2012-01-20 16:36:10.970000   
shkolote attake

Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
Задача такая
1)перевести  b[j] в хекс-чар и загнать в массив mass
2)(пока не реализовывал)передать из этой функции этот массив.
Post #: 16
RE: нужна небольшая помощь знающих С++ - 2012-01-21 18:37:37.340000   
shkolote attake

Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
короче нашёл решение вот такое весьма простое
char *hexstr_to_bin(char * str) { char *result ; result= (char*)malloc(16 * sizeof(char)); int ch; int i; for (i = 0; i &lt; 16; i++, str += 2) { sscanf(str, "%2X", &amp;ch); result[i] = (unsigned char)ch; cout&lt;&lt;" 0x"&lt;&lt;hex&lt;&lt;(unsigned short int)result[i]; } return result; } но почему то при выводе обнаруживаю что он к некоторым байтам ff дописывает типо 0xffa4 когда надо просто 0xa4.вопрос почему?
Post #: 17
RE: нужна небольшая помощь знающих С++ - 2012-01-27 20:22:11.903333   
shkolote attake

Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
короче авторизацию чёт пройти ни хрена не могу…начал грешить уже на эти 0xFF-ки мб кто поможет советом?может в этом дело быть или нет?
Post #: 18
RE: нужна небольшая помощь знающих С++ - 2012-01-28 13:29:30.253333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
если не можешь найти ошибку, то возьми wireshark и отлови им всю авторизацию рабочего icq клиента. Посмотри что он отправляет.
Post #: 19
RE: нужна небольшая помощь знающих С++ - 2012-01-28 19:09:38.853333   
shkolote attake

Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
спс за совет..воспользовался им посмотрел что отправляю, отправляю всё правильно(прям по гайду)..проверил хеш на онлайн сайтах где можно хеш посчитать-тоже всё верно..хз где проблема…ошибка приходит невен логин или пароль…
Post #: 20
RE: нужна небольшая помощь знающих С++ - 2012-01-29 13:12:36.303333   
shkolote attake

Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
насчёт рабочего клиента какой рабочий клиент шифрует пароль md5 хешем?по моему все клиенты его ксорят…
Post #: 21
RE: нужна небольшая помощь знающих С++ - 2012-01-29 19:37:08.520000   
shkolote attake

Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
сча сделал авторизацию на аське правда пароль шифровал хором…всё нормально приходят кукисы для авторизации на бос сервере…но блин ни как понять не могу где ошибка была для шифрования мд5…буду дальше разбираться)))
Post #: 22
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> нужна небольшая помощь знающих С++







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.