нужна небольшая помощь знающих С++
Пользователи, просматривающие топик: 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
|
|
|
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 < len; i += 2, j += 3) {
dst[i] = place + j;
dst[0] = src[0];
dst[1] = src[1];
dst[2] = '\0';
}
|
|
|
RE: нужна небольшая помощь знающих С++ - 2012-01-15 17:45:27.816666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
for ( i = 0; i < n; i+= 2 )
b[ i / 2 ] = a[i] * 10 + a[i + 1];
Но не забывай про переполнение типов. Я бы делал массивы хотя-бы int-ами.
|
|
|
RE: нужна небольшая помощь знающих С++ - 2012-01-15 17:49:52.120000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
for ( i = 0; i < n; i+= 2 )
b[ i / 2 ] = a[i] * 10 + a[i + 1];
Но не забывай про переполнение типов. Я бы делал массивы хотя-бы int-ами.
|
|
|
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<32;n+=2){
second_array[j]=heashkey[n] + heashkey[n+1]; j++;
}
cout<<second_array;
получилась херня полная. Вот сча решил делать что то в виде этого
int HextoDec(char *hex)
{
.......
}
int xstrtoi(char *hex) // hex string to int
{
......
}
int n;
char bytes[16]={0};
for (n = 0; n <32; n += 2) {
bytes[n / 2] = xstrtoi(heashkey[n]) * 16 +
xstrtoi(heashkey[n + 1]);
пока код только в набросках делаю…..думал быстренько сделаю, оказалось нет)))
|
|
|
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 >= '0' || c <= '9')
return c - '0';
else if(c >= 'a' && c <= '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;
}
|
|
|
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 и сосчитать сумму надо ведь его не просто в интовое значение перевести но и в десятичную систему?(вроде правильно говорю..)а после сложения опять перевести в шестнадцатитричную? по моему так….
|
|
|
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;
/*... далее всё остаётся неизменным. */
}
|
|
|
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 >= '0' || c <= '9')
return c - '0';
else if(c >= 'a' && c <= 'f')
return 10+ c - 'a';
else
return -1;
}
но что то непомогает
|
|
|
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 >= '0' || c <= '9')
return c - '0';
else if(c >= 'a' && c <= 'f')
return 10+ c - 'a';
else
return -1;
} Точно. quote:
ORIGINAL: shkolote attake но что то непомогает Значит берёшь отладчик и проверяешь отладчиком. Шаг за шагом. Как два ascii символа конвертируются в байт, и куда этот байт кладётся. Тут другого пути нету.
|
|
|
RE: нужна небольшая помощь знающих С++ - 2012-01-18 17:57:43.196666
|
|
|
shkolote attake
Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
|
нет проблема даже в переводе одного чар символа в инт…мой вариант тоже буквы не правильно переводит…только цифры норм…
|
|
|
RE: нужна небольшая помощь знающих С++ - 2012-01-18 19:14:43.703333
|
|
|
shkolote attake
Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
|
реализовал вот так и всё заработало проблема ещё в условии была || надо &&…всегда условие выполнялось
int xtoi(char c) {
if (c >= '0' && c <= '9')
return c - '0';
if (c >= 'A' && c <= 'F')
return 10 + c - 'A';
if (c >= 'a' && c <= 'f')
return 10 + c - 'a';
return -1;
}
|
|
|
RE: нужна небольшая помощь знающих С++ - 2012-01-18 20:06:28.056666
|
|
|
shkolote attake
Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
|
вот реализовал ура!!!!на выходе получаю массив[16] из интовых чисел в десятичной системе сча надо их обратно преобразовать в хекс и в чар и передать серверу((
int xtoi(char c) {
if (c >= '0' && c <= '9')
return c - '0';
if (c >= 'A' && c <= 'F')
return 10 + c - 'A';
if (c >= 'a' && c <= 'f')
return 10 + c - 'a';
return -1;
}
int hexstr_to_bin(char *str)
{
int b[16]={0};
int n, j;
for(n = 0, j = 0; str[n] != '\0' && str[n+1] != '\0'; n+=2, j++){
b[j] = xtoi(str[n]) * 16 + xtoi(str[n + 1]);
printf( "%i\n", b[j] );}
return b[j];
}
|
|
|
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)
{
int n, j;
char buffer[1];
char mass[16];
int b[16];
for(n = 0, j = 0; str[n] != '\0' && str[n+1] != '\0'; n+=2, j++){
b[j] = xtoi(str[n]) * 16 + xtoi(str[n + 1]);
printf( "%i\n", b[j] );
itoa (b[j],buffer,16);
mass[j]=buffer[1];
printf("%s\n",buffer);
printf("%s\n",mass[j]);
}
cout<<mass;
return b;
причём значение buffer выдаёт правильно..как только засунуть значения в массив?
|
|
|
RE: нужна небольшая помощь знающих С++ - 2012-01-20 12:24:41.270000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Опиши на человеческом (техническом) языке формат входных и выходных данных.
|
|
|
RE: нужна небольшая помощь знающих С++ - 2012-01-20 16:36:10.970000
|
|
|
shkolote attake
Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
|
Задача такая 1)перевести b[j] в хекс-чар и загнать в массив mass 2)(пока не реализовывал)передать из этой функции этот массив.
|
|
|
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 < 16; i++, str += 2) {
sscanf(str, "%2X", &ch);
result[i] = (unsigned char)ch;
cout<<" 0x"<<hex<<(unsigned short int)result[i];
}
return result;
}
но почему то при выводе обнаруживаю что он к некоторым байтам ff дописывает типо 0xffa4 когда надо просто 0xa4.вопрос почему?
|
|
|
RE: нужна небольшая помощь знающих С++ - 2012-01-27 20:22:11.903333
|
|
|
shkolote attake
Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
|
короче авторизацию чёт пройти ни хрена не могу…начал грешить уже на эти 0xFF-ки мб кто поможет советом?может в этом дело быть или нет?
|
|
|
RE: нужна небольшая помощь знающих С++ - 2012-01-28 13:29:30.253333
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
если не можешь найти ошибку, то возьми wireshark и отлови им всю авторизацию рабочего icq клиента. Посмотри что он отправляет.
|
|
|
RE: нужна небольшая помощь знающих С++ - 2012-01-28 19:09:38.853333
|
|
|
shkolote attake
Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
|
спс за совет..воспользовался им посмотрел что отправляю, отправляю всё правильно(прям по гайду)..проверил хеш на онлайн сайтах где можно хеш посчитать-тоже всё верно..хз где проблема…ошибка приходит невен логин или пароль…
|
|
|
RE: нужна небольшая помощь знающих С++ - 2012-01-29 13:12:36.303333
|
|
|
shkolote attake
Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
|
насчёт рабочего клиента какой рабочий клиент шифрует пароль md5 хешем?по моему все клиенты его ксорят…
|
|
|
RE: нужна небольшая помощь знающих С++ - 2012-01-29 19:37:08.520000
|
|
|
shkolote attake
Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
|
сча сделал авторизацию на аське правда пароль шифровал хором…всё нормально приходят кукисы для авторизации на бос сервере…но блин ни как понять не могу где ошибка была для шифрования мд5…буду дальше разбираться)))
|
|
|
|
|