No dobra...
Ostrzegam, jestem początkującym programistą i to może być wielka pomyłka
Proszę się nie śmiać jak ktoś zna C++, jestem jeszcze młodym studentem informatyki
[php:1:a7884bbe73]int gg_http_hash(const char *format, ...) //deklaracja funkcji, pierwszy parametr to wskaźnik do stringa, funkcja może mieć opcjonalne parametry
{
unsigned int a, c;
va_list ap;
int b = -1, i, j;
va_start(ap, format); //"przechwytujemy" dodatkowe (opcjonalne) parametry funkcji
if (!format) //jeśli parametr format jest stringiem pustym (a w zasadzie to wskaznikiem na NULL albo zerem (' ') funkcja zwraca zero i kończy działanie
return 0;
//jeśli są parametry robimy z nimi różne śmieszne rzeczy.
//poniżej (kawałkami tylko napiszę
//wykonujemy tyle razy jaką długość miał format, deklarujemy wskażnik do stringa i stringa (lub jak kto woli: tablicę znaków)
for (j = 0; j < strlen(format); j++) {
unsigned char *arg, buf[16];
//jeżeli aktualny znak(pod tym indeksem w stringu, bo string to nic innego jak tablica znaków) stringa format jest równy 'u' to:
if (format[j] == 'u') {
// do buf wstawiamy znaki zakończone znakiem końca stringa, liczbę znaków którą opisuje liczba sizeof(buf) (czyli 16*8 bitów), następnie jest formatowanie, po kolejnym przecinku jest źródło czyli pobieramy kolejny przekazany opcjonalny parametr
snprintf(buf, sizeof(buf), "%d", va_arg(ap, uin_t));
// w arg zapisujemy to cośmy przed chwilą dostali
arg = buf;
} else {
//jeżeli aktualny argument nie jest znakiem 0 (czyli " ") to w arg zapisujemy nic (czyli " "), jeżeli nie był pusty to zostawiamy go
if (!(arg = va_arg(ap, unsigned char*)))
arg = "";
}
i = 0;
//zczytujemy sobie po kolei (po znaku) z arg znaki i robimy z nimi bitowe szaleństwa
while ((c = (int) arg[i++]) != 0) {
a = (c ^

+ (c << 8);
b = (a >> 24) | (a << 8);
}
}
//jeżeli po tym wszytkim b < od zera to zamieniamy je na dodatnie, jeżeli dodatnie to zwracamy je
return (b < 0 ? -b :

;
}[/php:1:a7884bbe73]