현재 위치: > 최신 기사 목록> Bindec ()로 바이너리 스트링을 변환 할 때 항상 다른 결과가 있습니까?

Bindec ()로 바이너리 스트링을 변환 할 때 항상 다른 결과가 있습니까?

M66 2025-06-15

php에서, bindec () 함수는 이진 문자열을 10 진수로 변환하는 데 사용됩니다. 사용이 매우 간단 해 보이지만 많은 개발자들은 일관되지 않은 전환 결과 및 실제 운영에 대한 기대와 같은 문제를 겪게됩니다. 이 기사는이 문제의 원인을 예제로 자세히 분석하고 솔루션을 제공합니다.

bindec ()의 기본 사용

bindec () 함수는 이진 형식의 문자열 매개 변수를 수신하고 해당 소수 정수를 반환합니다. 예를 들어:

<코드> <? php $ binary = "1101"; // 바이너리 문자열 $ $ decimal = bindec ($ binary); echo $ decimal; // 출력 : 13?> </code>

위의 코드에서 1101 바이너리에 해당하는 소수점은 13 이고 함수는 올바르게 반환됩니다.

일관되지 않은 결과의 일반적인 원인

1. 입력 문자열에 이진이없는 문자를 포함시킵니다

bindec ()는 '0'과 '1'만 인식합니다. 문자열에 공백, 최신 또는 기타 문자가 포함 된 경우 결과는 비정상적입니다.

<코드> <? php $ binary = "1010 11"; // Space Echo Bindec ($ binary) 포함; // 출력 결과는 기대치를 충족하지 않습니까?> </code>

솔루션 : 입력 문자열은 '0''1' 만으로 구성되며 일반 또는 문자열로 필터링 할 수 있는지 확인하십시오.

2. 문자열의 시작과 끝에 숨겨진 문자가 있습니다.

웹 페이지 또는 기타 소스에서 복사 된 이진 문자열에는 라인 브레이크 또는 캐리지 리턴 \ r 과 같은 보이지 않는 문자가있을 수 있습니다.

<코드> <? php $ binary = "101011 \ n"; Echo bindec (trim ($ binary)); // 트림을 사용하여 시작 및 엔드 공백 문자를 제거하여 오류를 피하기 위해?> </code>

3. 값은 정수 범위를 초과합니다

bindec ()는 PHP 정수 유형을 반환하고 일부 환경에서 최대 정수가 제한되어 있습니다 (32 비트 또는 64 비트). 이진 번호가 매우 큰 경우 결과는 오버플로 또는 플로팅 포인트 수로 변환되어 부정확성을 초래할 수 있습니다.

예를 들어:

<코드> <? php $ binary = "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111는지까지는" 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111음 추출 추정 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111음 추출 추정 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111음 추출 추정

해결책:

  • GMP 또는 BCMATH 기능 라이브러리를 사용하여 대규모 작업을 지원합니다.

  • 예를 들어 gmp_init ()gmp_strval ()을 사용하십시오.

<코드> <? php $ binary = "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111는지까지는" 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111음 추출 추정 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111음 추출 추정 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111음 추출 추정

4. 가변 유형의 오용

들어오는 매개 변수가 문자열 유형인지 확인하십시오. 숫자 유형이 전달되면 PHP는 자동으로 변환하여 선행 0을 잃을 수있어 예상과 ​​다른 결과를 초래할 수 있습니다.

<코드> <? php $ binary = 0101; // 이진 문자열이 아닌 Octal Number 5 ($ binary); // 잘못된 결과?> </code>

올바른 글쓰기 :

<코드> <? php $ binary = "0101"; // 문자열 양식 echo bindec ($ binary); // 출력 5?> </code>

요약

  • bindec ()를 사용하는 경우 입력이 순수한 바이너리 스트링이고 추가 문자가 없는지 확인해야합니다.

  • 매우 큰 이진수의 경우 GMP 또는 BCMATH 라이브러리를 사용해야합니다.

  • 매개 변수가 자동 숫자 변환으로 인한 오류를 피하기 위해 문자열인지 확인하십시오.

  • Trim () 및 일반 표현식을 사용하여 입력 문자열을 청소하여 올바른 형식을 보장합니다.

이러한 세부 사항을 이해 한 후에는 Bindec () 로 바이너리 스트링을 변환 할 때 결과는 예상치 못한 것 "의 문제를 피할 수 있습니다.