>  기사  >  백엔드 개발  >  PHP는 내장 함수를 사용하지 않고 문자열 변환 방법을 구현합니다.

PHP는 내장 함수를 사용하지 않고 문자열 변환 방법을 구현합니다.

小云云
小云云원래의
2018-02-10 11:06:471500검색

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입니다. 변환할 때 각 문자에서 '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] == '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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.