ホームページ  >  記事  >  バックエンド開発  >  PHPは組み込み関数を使用せずに文字列変換メソッドを実装します

PHPは組み込み関数を使用せずに文字列変換メソッドを実装します

小云云
小云云オリジナル
2018-02-10 11:06:471482ブラウズ

PHP 文字列型の数値を整数値に変換する場合、通常はシステムの組み込み API を使用して変換を行いますが、規制によりシステムの組み込み API を使用して変換することが許可されていない場合は、関数変換を自分で行う必要があります。ここではそれを達成する方法を見ていきます。

システムの組み込みAPIメソッド

$num = '345432123';

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

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

はASCIIコードメソッドを使用します

各文字は加算、減算、乗算、除算するときにASCIIコードに対応するため、変換にASCIIコードメソッドを使用します。この文字は、実際には、ASCII コードに対して加算、減算、乗算、および除算の演算、つまり整数演算を実行するためのものであり、最終的には整数を返します


- インターネットから転送された画像 -

。上の図で「0」〜「」の文字がわかります。「9」の ASCII コードは 48〜57 です。たとえば、「1」 - 「0」 = 1 のように、各文字から「0」を引きます。 '2' - '0' = 2。戻り値は Int 型です。以下のコード実装を参照してください。

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)

Redis には、文字列を整数に変換する関数も用意されており、これも ASCII コードで実行されます。実装は比較的完全かつ厳密です。詳細については、

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] == '0') {
  if (value != NULL) *value = 0;
  return 1;
 }

 if (p[0] == '-') {
  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] >= '1' && 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] >= '0' && p[0] <= &#39;9&#39;) {
  if (v > (ULLONG_MAX / 10)) /* Overflow. */
   return 0;
  v *= 10;

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

  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;
}

関連推奨事項:

sql CONVERT() 文字列を整数型に変換する 日付文字型

以上がPHPは組み込み関数を使用せずに文字列変換メソッドを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。