php - Dans un morceau de code utilisé pour déterminer à quelle ville appartient une adresse IP, pourquoi des valeurs négatives devraient-elles être prises en compte lors de l'écriture d'un morceau de code ?
淡淡烟草味
淡淡烟草味 2017-05-16 13:11:08
0
1
826

Commençons par le code. Sa source originale devrait être DZ ! Il y a aussi un tel paragraphe dans mon ancien projet que j'ai lu récemment
Je n'ai pas de talent, alors je l'ai analysé morceau par morceau, et maintenant je. j'ai découvert qu'il y a un endroit que je ne comprends vraiment pas. :if($ipbegin < 0) $ipbegin += pow(2, 32); // Dans quelles circonstances $ipbegin<0 ???
Une autre question est : cette fonction fait référence à un qqwry.dat (presque écrit comme bat au début). Où se trouve la source originale de ce fichier, comme le site officiel, la documentation, comment l'utiliser, etc. ?
J'ai consulté l'Encyclopédie Baidu, il n'y a qu'une brève introduction, mais je ne trouve toujours pas la réponse que je veux.

 fonction publique qqwry($ip='222.222.222.222'){
        //$fd->ressource(24, flux)
        if(!$fd = @fopen("./Public/qqwry.dat", 'rb')) {
            return 'Fichier de données IP invalide';
        }
        $ip = exploser('.', $ip);
        //$ipNum=2079656996
        $ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3] ;

        //Obtenir les positions de début et de fin de l'index d'adresse IP À ce stade, la sortie des deux variables est tronquée (doit être binaire)
        if(!($DataBegin = fread($fd, 4)) || !($DataEnd = fread($fd, 4)) ){
            retour;
        }

        // La fonction unpack() décompresse les données d'une chaîne binaire, L--entier long non signé
        // imploser — Joindre les éléments du tableau avec (à) une chaîne
        @$ipbegin = imploser('', unpack('L', $DataBegin));// 6153398

        //pow(x,y)--La fonction pow() renvoie x élevé à la puissance y.
        if($ipbegin < 0) $ipbegin += pow(2, 32); // Dans quelles circonstances $ipbegin<0 ???


        // imploser — Joindre les éléments du tableau avec (à) une chaîne
        @$ipend = imploser('', unpack('L', $DataEnd));

        if($ipend < 0) $ipend += pow(2, 32);
        $ipAllNum = ($ipend - $ipbegin) / 7 + 1 ;

        $BeginNum = $ip2num = $ip1num = 0 ;
        $ipAddr1 = $ipAddr2 = '';
        $EndNum = $ipAllNum ;

        while($ip1num > $ipNum || $ip2num < $ipNum) {
        //Ce qui suit est une grande section de dichotomie, donc je ne le copierai pas
淡淡烟草味
淡淡烟草味

répondre à tous(1)
某草草
  • IP est exprimé en binaire en 32 bits, donc int est également en 32 bits. Utilisez des nombres pour stocker l'IP, ce qui offre une meilleure efficacité de recherche et un meilleur espace de stockage

  • . Le premier chiffre de
  • int représente le positif et le négatif. Il est donc normal d'avoir des nombres négatifs

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal