PHP 는 내 장 된 함 수 를 사용 하지 않 고 문자열 을 정형 화 하 는 방법 예시

3821 단어 php문자열정형
소개 하 다.
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} - '0';   
  $int += $num;  
 }

 return $int;  
}

 $num = '345432123'; 
 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] <= '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
",num); // 345432123 retunr 0; }
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기