|
|
|
| /* Русский Вариант */ |
| « Вы Джипис? | Полуторауровневая архитектура приложения » |
Давайте-ка я вам расскажу, что будучи энтузиастом Visual Basic-а, я страдаю от того, что здесь так много статей с участием избранного мной языка программирования. Поэтому каждый раз, когда я публикую что-то на другом языке, я обычно позволяю себе ехидную ухмылку. Но сегодня я не ухмыляюсь. О да, сегодня я просто злорадствую!
Почему сегодня, спросите вы? Только взгляните на эту функцию преобразования из ASCII в HEX (написанную на C) из CGI приложения, которую прислал нам Кай. Да, С. Тот самый C, который настолько крут, что С-программисты бреются топором, а подпоясываются ломом. Или говоря языком ботанов, настолько крут, что С-программисты вводят все данные в двоичном формате... через два медных кабеля. Она даже хуже чем Худшая реализация на VB всех времен. И она на С!
Так что если у вас не отлегло насчет вашего (возможно менее подверженного жесткому кодированию) языка, то я уже не знаю, что вам поможет. А теперь прошу прощения, пойду набивать себе татуировку VB4¥ под костяшками.
/* meist verwendeten Sonderzeichen entfernen (%Hex) */ for (i=0,j=0;iswitch(buff[i]) { case '+': value[j] = ' '; buff[i] = ' '; break; case '%': strncpy(hexstr, &buff[i+1],2); i = i + 2; if (((strcmp(hexstr, "00") == 0)) || ((strcmp(hexstr, "01") == 0)) || ((strcmp(hexstr, "02") == 0)) || ((strcmp(hexstr, "03") == 0)) || ((strcmp(hexstr, "04") == 0)) || ((strcmp(hexstr, "05") == 0)) || ((strcmp(hexstr, "06") == 0)) || ((strcmp(hexstr, "07") == 0)) || ((strcmp(hexstr, "08") == 0)) || ((strcmp(hexstr, "09") == 0)) || ((strcmp(hexstr, "0A") == 0)) || ((strcmp(hexstr, "0B") == 0)) || ((strcmp(hexstr, "0C") == 0)) || ((strcmp(hexstr, "0D") == 0)) || ((strcmp(hexstr, "0E") == 0)) || ((strcmp(hexstr, "0F") == 0)) || ((strcmp(hexstr, "10") == 0)) || ((strcmp(hexstr, "11") == 0)) || ((strcmp(hexstr, "12") == 0)) || ((strcmp(hexstr, "13") == 0)) || ((strcmp(hexstr, "14") == 0)) || ((strcmp(hexstr, "15") == 0)) || ((strcmp(hexstr, "16") == 0)) || ((strcmp(hexstr, "17") == 0)) || ((strcmp(hexstr, "18") == 0)) || ((strcmp(hexstr, "19") == 0)) || ((strcmp(hexstr, "1A") == 0)) || ((strcmp(hexstr, "1B") == 0)) || //[РЕД: Обрез] ((strcmp(hexstr, "F0") == 0)) || ((strcmp(hexstr, "F1") == 0)) || ((strcmp(hexstr, "F2") == 0)) || ((strcmp(hexstr, "F3") == 0)) || ((strcmp(hexstr, "F4") == 0)) || ((strcmp(hexstr, "F5") == 0)) || ((strcmp(hexstr, "F6") == 0)) || ((strcmp(hexstr, "F7") == 0)) || ((strcmp(hexstr, "F8") == 0)) || ((strcmp(hexstr, "F9") == 0)) || ((strcmp(hexstr, "FA") == 0)) || ((strcmp(hexstr, "FB") == 0)) || ((strcmp(hexstr, "FC") == 0)) || ((strcmp(hexstr, "FD") == 0)) || ((strcmp(hexstr, "FE") == 0)) || ((strcmp(hexstr, "FF") == 0))) { value[j] = '%'; j++; strcpy(value, hexstr); j = j + 2; if (strcmp(hexstr, "21") == 0) { z = i - 2; for (k=i-2;< if (k == z) { strncpy(strg, buff, i-1); strg[k] = '!'; } else strg[k] = buff[i]; } strcpy(buff, strg); } //[РЕД: Обрез] if (strcmp(hexstr, "25") == 0) { z = i - 2; for (k=i-2;k<STRLEN(BUFF);K++,I++) color="#000099" if (k == z) { strncpy(strg, buff, i-1); strg[k] = ' '; strg[k+1] = 'P'; strg[k+2] = 'r'; strg[k+3] = 'o'; strg[k+4] = 'z'; strg[k+5] = 'e'; strg[k+6] = 'n'; strg[k+7] = 't'; strg[k+8] = ' '; } else strg[k+8] = buff[i]; } strcpy(buff, strg); } if (strcmp(hexstr, "26") == 0) { z = i - 2; for (k=i-2;k<STRLEN(BUFF);K++,I++) color="#000099" if (k == z) { strncpy(strg, buff, i-1); strg[k] = ' '; strg[k+1] = 'u'; strg[k+2] = 'n'; strg[k+3] = 'd'; strg[k+4] = ' '; } else strg[k+4] = buff[i]; } strcpy(buff, strg); } if (strcmp(hexstr, "27") == 0) { z = i - 2; for (k=i-2;k<STRLEN(BUFF);K++,I++) color="#000099" if (k == z) { strncpy(strg, buff, i-1); strg[k] = '"'; } else strg[k] = buff[i]; } strcpy(buff, strg); } //[РЕД: Обрез] if (strcmp(hexstr, "A9") == 0) { z = i - 2; for (k=i-2;k<STRLEN(BUFF);K++,I++) color="#000099" if (k == z) { strncpy(strg, buff, i-1); strg[k] = ' '; strg[k+1] = 'C'; strg[k+2] = 'o'; strg[k+3] = 'p'; strg[k+4] = 'y'; strg[k+5] = 'r'; strg[k+6] = 'i'; strg[k+7] = 'g'; strg[k+8] = 'h'; strg[k+9] = 't'; strg[k+10] = ' '; } else strg[k+10] = buff[i]; } strcpy(buff, strg); } if (strcmp(hexstr, "AD") == 0) { z = i - 2; for (k=i-2;k<STRLEN(BUFF);K++,I++) color="#000099" if (k == z) { strncpy(strg, buff, i-1); strg[k] = '-'; } else strg[k] = buff[i]; } strcpy(buff, strg); } //[РЕД: Обрез] if (strcmp(hexstr, "FF") == 0) { z = i - 2; for (k=i-2;k<STRLEN(BUFF);K++,I++) color="#000099" if (k == z) { strncpy(strg, buff, i-1); strg[k] = 'y'; } else strg[k] = buff[i]; } strcpy(buff, strg); } else { z = i - 2; for (k=i-2;k<STRLEN(BUFF);K++,I++) color="#000099" if (k == z) { strncpy(strg, buff, i-1); strg[k] = ' '; } else strg[k] = buff[i]; } strcpy(buff, strg); } } //[РЕД: Файл целиком
Оригинал:http://worsethanfailure.com/Articles/Who_0x27_s_Hard-Core_Now_0x3f_.aspx
Перевод:Евгений Виговский
| « Вы Джипис? | Полуторауровневая архитектура приложения » |