PHP에서 다른 숫자 사이의 전환을 처리하는 것이 일반적인 작업입니다. bindec () 함수는 PHP에 의해 기본적으로 제공되는 함수이며 구체적으로 변환하는 데 사용됩니다. 이 기사는 PHP의 Bindec () , 변환 로직 및 정수 유형 (Ints)과의 관계에 대한 심층 분석을 수행합니다.
Bindec ()는 이진 문자열을 인수로 취하고 해당 소수점 정수를 반환합니다. 예를 들어:
echo bindec("1010"); // 산출 10
이 예는 간단하고 직관적이며 바이너리 1010을 10 진수 10 으로 해석합니다.
bindec ()는 숫자가 아닌 문자열을받습니다. 입력이 순전히 숫자 형태이더라도 문자열이어야합니다.
bindec("1101"); // 옳은
bindec(1101); // 권장되지 않습니다,혼란을 일으킬 수 있습니다
bindec ()는 본질적으로 문자열에서 각 비트를 0 또는 1로 처리하고 비트 가중치 (2^N)를 오른쪽에서 왼쪽으로 합산하여 변환을 수행합니다.
예를 들어 Bindec ( "1101")를 가져갑니다.
1*(2^3) + 1*(2^2) + 0*(2^1) + 1*(2^0)
= 8 + 4 + 0 + 1
= 13
이 처리 로직은 표준 바이너리에서 10 진수 알고리즘과 매우 일치합니다. PHP는 C 언어를 통해 내부적으로 구현되며 매우 효율적입니다.
PHP의 정수 유형은 상한 (플랫폼에 따라 32 비트 또는 64 비트)입니다. 그러나 Bindec ()는 이 범위에 국한되지 않습니다. 이진 문자열이 PHP int의 최대 값을 초과하면 유형의 반환 된 값이 플로트가 됩니다.
예:
echo bindec("1111111111111111111111111111111111111111111111111111111111111111");
// 산출 18446744073709551615(64 개별 1)
64 비트 플랫폼 에서이 결과는 여전히 정수로 반환 할 수 있습니다. 32 비트 플랫폼에서 결과는 부동 소수점 번호가됩니다.
또한 부동 소수점 최대 정확도가 초과되면 결과가 부정확 해집니다. 따라서 매우 긴 이진 문자열을 다룰 때 BCMATH 또는 GMP 확장을 고려해야합니다.
많은 개발자들은 Bindec () 및 decbin ()을 사용하여 파티션 간의 왕복 변환을 형성합니다.
$dec = bindec("100101");
$bin = decbin($dec);
echo $bin; // 산출 100101
이 상호 운용성은 완전히 신뢰할 수 있지만 입력 바이너리 스트링이 형식 사양을 준수하고 0 및 1 이외의 문자를 포함 할 수없는 경우에만 가능합니다.
bindec ()는 이진이 아닌 문자 다음 부분을 무시합니다. 예를 들어:
echo bindec("11012"); // 산출 13,"2" 무시했습니다
이것은 PHP의 bindec () 가 "내성"이지만 엄격하지 않음을 보여줍니다. 따라서 호출하기 전에 입력 검증을 수행하는 것이 좋습니다.
function is_valid_binary($str) {
return preg_match('/^[01]+$/', $str);
}
이 검증을 사용하면 잠재적 인 논리적 오류를 피할 수 있습니다.
bindec ()는 정수를 반환하지만 (또는 큰 정수 일 때 플로트) 입력은 항상 문자열입니다. 이는 바닥의 PHP의 동적 유형 시스템에 의한 암시 적 변환을 반영합니다. PHP는 유형 유형 선언을 강제로하지 않지만 인터페이스를 설계 할 때는 예상 유형을 명시 적으로 설계하여 런타임 오류를 줄여야합니다.
예를 들어, 기능이 배열 인덱싱 또는 비트 작업에 대한 Bindec () 출력 결과에 의존하는 경우 강제 유형 검사가 특히 중요합니다.
공통 사용 사례는 이진을 사용하여 여러 권한 플래그를 나타내는 권한 시스템입니다. 예를 들어:
$binaryPermission = "1011"; // 代表四개별권한:1.1、1.2和1.4개별启用
$permissions = bindec($binaryPermission);
// 检查1.3비트입니다1(오른쪽에서 왼쪽으로 계산하십시오)
if ($permissions & (1 << 2)) {
echo "권한3활성화";
}
이 상황에서 Bindec ()는 권한 플래그 문자열을 정수 비트 마스크로 효율적으로 변환하고 비트 작업으로 상태를 신속하게 결정할 수 있습니다.