Page 1 sur 1

C++ to PHP

Posté : 10 janv. 2017, 16:32
par stef75
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); }

Re: C++ to PHP

Posté : 11 janv. 2017, 02:58
par @rthur
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

Re: C++ to PHP

Posté : 11 janv. 2017, 03:00
par @rthur
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

Re: C++ to PHP

Posté : 14 janv. 2017, 13:03
par Jc71
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.

++