PHPで組み込み関数を使わずに文字列を整数に変換する方法を詳しく解説

墨辰丷
リリース: 2023-03-27 06:44:01
オリジナル
1513 人が閲覧しました

一般に、PHP の文字列型の数値を整数値に変換する場合、システムの組み込み API を使用して変換を行いますが、次の記事では主に、PHP が文字列の変換に組み込み関数を使用しない方法を紹介します。メソッドの例は記事で詳しく紹介されていますので、一緒に見てみましょう。

はじめに

PHP 文字列型の数値を整数値に変換する場合、通常、システムの組み込み API を使用して変換を行いますが、規制によりシステムの組み込み API の使用が許可されていない場合は、 API で変換する代わりに、関数変換を自分で実装させたらどうすればよいでしょうか?ここではそれを達成する方法を見ていきます。

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

$num = '345432123';

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

//(二)
$num = intval($num);
//输出:
//int(345432123)
ログイン後にコピー

ASCIIコードメソッドを使用

次に、各文字がASCIIに対応するため、ASCIIコードメソッドを使用して変換を実行します。この文字を加算、減算、乗算、除算する場合、実際には ASCII コードの加算、減算、乗算、除算、つまり整数演算となり、最終的には整数が返されます。上の図でわかるように、文字「0」~「9」の ASCII コードは 48 ~ 57 です。変換するときは、各文字から「0」を減算します。 '1' - '0' = 1、'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] == &#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;
}
ログイン後にコピー

を参照してください。 :

PHP で漢字を実装します整数数値への変換 (例: 100 0) 101 に変換します

sql CONVERT() String整数型に変換します日付文字型

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


以上がPHPで組み込み関数を使わずに文字列を整数に変換する方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート