C++ to PHP

stef75
Invité n'ayant pas de compte PHPfrance

10 janv. 2017, 16:32

Bonjour à tous,

j'ai commencé un peu de PHP et je pense que j'avance bien, mais j'ai un probleme delicat qui sort totalement de mes competences.

Je dois traduire la fonction c++ suivant en PHP. Mais voila, en C++ quand le unsigned long est plein, il s'arrange pour enlever ce qui ne rentre pas, mais en PHP, je me retrouve avec une variable () qui n'est est hors limit.

Pouvez vous m'aider svp ?

Mille mercis,
Stef

Code : Tout sélectionner

unsigned long JSHash(const std::string& str) { unsigned long b = 495120; unsigned long a = 60999; unsigned long hash = 0; for(std::size_t i = 0; i < str.length(); i++) { hash = hash * a + str[i]; a = a * b; } return (hash & 0x7FFFFFFF); }

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

11 janv. 2017, 02:58

Bonjour,

Une piste pourrait être de tester la valeur courante avec la variable PHP_INT_MAX qui correspond à la valeur maximale possible en PHP pour un entier.
http://php.net/manual/fr/reserved.constants.php
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

11 janv. 2017, 03:00

J'ai trouvé un passage dans la doc qui pourrait t'intéresser :
La taille d'un entier est dépendant de la plate-forme, cependant, une valeur maximale d'environ 2 milliards est habituelle (cela correspond à 32 bits signés). Les plateformes 64-bit ont habituellement une valeur maximale d'environ 9E18, sauf pour Windows, qui est toujours en 32 bit. PHP ne supporte pas les entiers non-signés. La taille d'un entier peut être déterminée en utilisant la constante PHP_INT_SIZE, et la valeur maximale, en utilisant la constante PHP_INT_MAX
Source : http://php.net/manual/fr/language.types.integer.php
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 25 Messages

14 janv. 2017, 13:03

Bonjour,

Et je rajouterai ceci : tous les entiers hors limites en PHP (comme les BIGINT récupérés d'une base de données) sont a gérer sous forme de chaînes de caractères.

++
Architecte de données & applications web
MCSE Data Management & Analytics