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;
}
총결산이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.