一般に、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} - '0'; $int += $num; } return $int; } $num = '345432123'; var_dump(convertInt($num)); //输出: int(345432123)
PHP で漢字を実装します整数数値への変換 (例: 100 0) 101 に変換します sql CONVERT() String整数型に変換します日付文字型 PHPは、組み込み関数を使用せずに文字列整数型への変換を実装しますメソッド 以上がPHPで組み込み関数を使わずに文字列を整数に変換する方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。#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] <= '9') {
v = p[0]-'0';
p++; plen++;
} else if (p[0] == '0' && slen == 1) {
*value = 0;
return 1;
} else {
return 0;
}
while (plen < slen && p[0] >= '0' && p[0] <= '9') {
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;
}
を参照してください。 :