Есть код: Code: int BuffLen=(Param1c>>3)-(Param18>>3); int EAX=(Param1c+Param18)&7; if(EAX) Temp[BuffLen-2]&=(0xff)<<(8-EAX); int ESI = Param18&7; что делает ">>", "<<" и "&" ???
нужно переменную int загнать в char, я использовал функцию itoa а она в конец массива дописывает два байта \x00\xCC как их оттуда убрать? з.ы пишу почти первую программу на си))
Есть char массив в С++ Code: char * test=new char[5]; test[0]=0x39; test[1]=0x32; test[2]=0x33; test[3]=0x34; test=test+2; //массив сместится на 2 байта: test[0] бдет равно 0х33, test[4]=0x34 и т.д. При попытке сделать такое смещение в С# вылетает ошибка Error 2 Operator '+' cannot be applied to operands of type 'byte[]' and 'int' как быть???
2z01b test - указатель применение к нему операции взятия адреса какбы не имеет смысла ))) не знаю как в Си++ и Си#, но в plain Cследующий код абсолютно правомерен. char *test; test = (char *)malloc(5); test[0] = 1; test[1] = 2; test[2] = 3; test[3] = 4; test = test + 2;
написал прогу которая удаляет коментарии с исходников. Указываем в командной строке файл *cpp и она трет коменты... только иногда захватывает чють больше(((( как исправить? Code: #include <string.h> #include <stdio.h> #include <conio.h> int main(int argc, char * argv[]) { FILE *f; FILE *fp; if((f=fopen(argv[1],"r"))==NULL) // fgsdgsdgsdgds {printf("can open file..."); getch();exit(1);} int i=0,n;char str[50000]; while (!feof(f)) { fscanf(f,"%c",&str[i]);i++; } //const char ch='\n'; n=strlen(str);int kol=0; for(int j=0;j<n;j++) // fgsdgsdgsdgds { if ((str[j]=='/')&&(str[j+1]=='/')) //{if (str[j]=='\n') { kol++; printf ("%2d)Exist ! ! ! !!\n",kol); do { str[j]=' ';j++;}while (str[j]!='\n'); }//if }//for fp=fopen("no_coment.cpp","w"); fprintf(fp,"%s",str); getch(); }
Smapt omfg! Вы что, C# по Кернигану-Ритчи учите? =))))) 1. операции с указателями считаются небезопасными, поэтому чтобы их разрешить нужно перед соответствующими блоками кода добавлять слово unsafe и включать соответствующую опцию у компилятора. 2. нужно явно приводить тип Code: test[0]= ([COLOR=Blue][B]char[/B][/COLOR])0x39; 3. и тогда уж нужно использовать stackalloc, а не new для выделения памяти Code: char *test= [COLOR=Blue][B]stackalloc[/B][/COLOR] char[5];
Подобным алгоритмом - никак. Кода раз в 10 как минимум больше надо. Читай статьи про лексический анализ, юзай алгоритм State Machine.
Forcer, код был на СИ++ для примера) Всем спасибо, проблема решена... Да, и ещё вопрос, может подскажите где можно почтать про асинхронные(неблокируемые) сокеты, желательно с примерами реализации(в си++)
вот здесь можно скачать хорошую книгу про программирование сокетов и не только http://iboo.ru/1452.htm А это книга по сетевому программированию в windows, очень много интересного PHP: http://www.pkmz.com/uploads/manuals/Network%20Programming%20for%20Microsoft%Windows.pdf То же самое что у Forcer'a но на русском, что то ссылка постиццо не хотела (((
Smapt http://www.intuit.ru/department/network/pami/4/ Network Prog for Windows(Second Edition): http://main.coder.md/2007/07/network-programming-for-microsoft.html
Помогите, пжлста, найти источник проблемы. Формирую тсп-пакет, с syn-флагом, отправляю. Code: void send_packet(SOCKET sd, unsigned short port, struct sockaddr_in source, char *ip) { struct sockaddr_in servaddr; memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(port); servaddr.sin_addr.s_addr = inet_addr(DEST); tcp_hdr.sport = getpid(); tcp_hdr.dport = htons(port); tcp_hdr.seqnum = getpid() + port; tcp_hdr.acknum = 0; tcp_hdr.flags = 0x02; tcp_hdr.win = htons(128); tcp_hdr.crc = 0; tcp_hdr.urgptr = 0; pseudo_hdr.source_addr = source.sin_addr.s_addr; pseudo_hdr.dest_addr = servaddr.sin_addr.s_addr; pseudo_hdr.place_hold = 0; pseudo_hdr.proto = IPPROTO_TCP; pseudo_hdr.length = htons(sizeof(struct tcp_header)); memcpy(&tcp_hdr, &pseudo_hdr, sizeof(struct tcp_header)); tcp_hdr.crc = chksum((unsigned short *)&pseudo_hdr, sizeof(struct pseudo_hdr)); if(sendto(sd, &tcp_hdr, sizeof(struct tcp_header), 0, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) { printf("Error: sendto() failed\n %d", WSAGetLastError()); exit(-1); } } Тут все норм, ГетЛастЕррор молчит Затем жду ответа от сервера: Code: int recv_packet(SOCKET sd) { char recvbuf[1500]; struct tcp_header *tcphdr = (struct tcp_header *)(recvbuf + sizeof(struct ip_hdr)); while(1) { if(recv(sd, recvbuf, sizeof(recvbuf), 0) < 0) { printf("Error: recv() failed\n %d", WSAGetLastError()); } if(tcphdr->dport == getpid()) { if((tcphdr->flags == 0x02) && (tcphdr->flags == 0x10)) return 1; else return 0; } } } Прога останавливается на: Code: if(recv(sd, recvbuf, sizeof(recvbuf), 0) < 0) Она не зависает....но и не работает. Помогите плиз...
в этом месте recv ждёт чтобы чтонить пришло в sd. Туда ничего не идёт (т.к. всё уже пришло в прошлые проходы цикла) и поэтому нифига и не происходит. Нужно определять получил ли ты всю нужныую инфу и выходить из цикла. (определять можно например по количеству принятых байт)
2 criz прикольный код 8))))) .... а что ты хочешь то??? Ты уже намылился формировать SEQ-и и ACK-и или пока еще нет 8))? в любом случае даешь мало информации ты не дал информацию как ты создаешь сокет!