Maison  >  Article  >  développement back-end  >  Explication détaillée de la façon de convertir une chaîne en entier en PHP sans utiliser les fonctions intégrées

Explication détaillée de la façon de convertir une chaîne en entier en PHP sans utiliser les fonctions intégrées

墨辰丷
墨辰丷original
2018-05-21 09:53:411504parcourir

En général, si vous souhaitez convertir des nombres de type chaîne PHP en nombres entiers, nous utiliserons l'API intégrée du système pour effectuer la conversion. Cependant, l'article suivant vous présente principalement comment PHP n'utilise pas les fonctions intégrées. pour implémenter des chaînes. L'exemple de la méthode de conversion en type entier est présenté de manière très détaillée dans l'article. Les amis qui en ont besoin peuvent s'y référer.

Introduction

Si vous souhaitez convertir des nombres de type chaîne PHP en nombres entiers, nous utilisons généralement l'API intégrée du système pour le faire Effectuez une conversion, mais que se passe-t-il si nous ne sommes pas autorisés à utiliser la conversion API intégrée au système, mais sommes autorisés à implémenter nous-mêmes une conversion de fonction ? Nous voyons ici comment y parvenir.

Méthode API intégrée au système

$num = '345432123';

 //(一)
$num = (int)$num;
//输出:
//int(345432123)

//(二)
$num = intval($num);
//输出:
//int(345432123)

Utiliser la méthode du code ASCII

Ensuite, nous utilisons la méthode du code ascii pour convertir, car chaque caractère correspond à un code ascii, lors de l'ajout, de la soustraction, de la multiplication et de la division de ce caractère Quand , il s'agit en fait d'opérations d'addition, de soustraction, de multiplication et de division sur des codes ascii, c'est-à-dire des opérations entières, qui finiront par renvoyer un nombre entier


-image transférée depuis Internet. -

Comme vous pouvez le voir sur l'image ci-dessus, les codes ASCII des caractères '0' ~ '9' sont 48 ~ 57. Lors de la conversion, nous soustrayons '0' de chaque caractère par exemple. : '1' - '0' = 1, '2' - '0' = 2 La valeur de retour est de type Int Voir l'implémentation du code ci-dessous

function convertInt($strInt = ''){ 
 $len = strlen($strInt); 
 $int = 0;

 for($i=0;$i<$len;$i++){
  $int *= 10;   
  $num = $strInt{$i} - &#39;0&#39;;   
  $int += $num;  
 }

 return $int;  
}

 $num = &#39;345432123&#39;; 
 var_dump(convertInt($num)); //输出: int(345432123)

<.>

est également disponible dans Redis. Fournit une fonction de conversion de chaîne en entier, qui se fait également via du code ASCII. L'implémentation est relativement complète et rigoureuse. Pour plus de détails, veuillez vous référer au

Fonction string2ll

#include <stdio.h>
#include <limits.h>
#include <string.h>

/* Convert a string into a long long. Returns 1 if the string could be parsed
 * into a (non-overflowing) long long, 0 otherwise. The value will be set to
 * the parsed value when appropriate. */
int string2ll(const char *s, size_t slen, long long *value) {
 const char *p = s;
 size_t plen = 0;
 int negative = 0;
 unsigned long long v;

 if (plen == slen)
  return 0;

 /* Special case: first and only digit is 0. */
 if (slen == 1 && p[0] == &#39;0&#39;) {
  if (value != NULL) *value = 0;
  return 1;
 }

 if (p[0] == &#39;-&#39;) {
  negative = 1;
  p++; plen++;

  /* Abort on only a negative sign. */
  if (plen == slen)
   return 0;
 }

 /* First digit should be 1-9, otherwise the string should just be 0. */
 if (p[0] >= &#39;1&#39; && p[0] <= &#39;9&#39;) {
  v = p[0]-&#39;0&#39;;
  p++; plen++;
 } else if (p[0] == &#39;0&#39; && slen == 1) {
  *value = 0;
  return 1;
 } else {
  return 0;
 }

 while (plen < slen && p[0] >= &#39;0&#39; && p[0] <= &#39;9&#39;) {
  if (v > (ULLONG_MAX / 10)) /* Overflow. */
   return 0;
  v *= 10;

  if (v > (ULLONG_MAX - (p[0]-&#39;0&#39;))) /* Overflow. */
   return 0;
  v += p[0]-&#39;0&#39;;

  p++; plen++;
 }

 /* Return if not all bytes were used. */
 if (plen < slen)
  return 0;

 if (negative) {
  if (v > ((unsigned long long)(-(LLONG_MIN+1))+1)) /* Overflow. */
   return 0;
  if (value != NULL) *value = -v;
 } else {
  if (v > LLONG_MAX) /* Overflow. */
   return 0;
  if (value != NULL) *value = v;
 }
 return 1;
}

//-------- 执行 ---------
int main(){
 long long num;
 string2ll("345432123",strlen("345432123"),&num);
 printf("%d\n",num); //输出 345432123
 retunr 0;
}

Recommandations associées :

PHP pour implémenter les caractères chinois

Convertir en entierNombre, par exemple : cent un est converti en 101

sql CONVERT( ) Chaîne

en type entier Type de caractère date

L'implémentation PHP n'utilise pas de fonctions intégrées pour implémenter les caractères String

Convertir en entierMéthode

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn