2016-10-25 3 views
0

저는 압축 알고리즘을 사용하고 있습니다. 제 모국어는 PHP입니다. PHP는 일반적으로 큰 알고리즘을 만들지는 못하는 언어라는 것을 이해할 수 있지만 가능한지 궁금합니다. . (of course it's possible - more so efficient and powerful)PHP의 압축 알고리즘

난을 시도 것 알고리즘의 첫 번째 유형은 가장 많이 사용되는 바이트 (chars)에 복용하고 바이너리 종류로 변환하여, 간단한 적응 알고리즘 (ex: a = 0001, b = 0010, c = 0011은) - 실제 존재하지 그래도 내가 익숙한 PHP에서이 작업을 수행하기 전에 가장 가치있는 ASCII 값을 얻는 a = chr(33), b = chr(34)과 같은 간단한 ASCII 변환을 사용하여 압축 정의에 대해 smallest -> largest 연산자를 사용합니다.

그래서 내가 무엇을 해달라고 부탁하면 대신 변수에 이진 값을 할당 할 수있는 방법이 있다면 내가 가면, ASCII로 표현되고 있다는 점이다 :

int으로 해석 될 수
$string_after_compression = 000100100011; 
#split it by 4 bits per = 0001 | 0010 | 0011 

- 따라서 예를 들어, 대문자로 된 int은 간단한 문장으로 사용 가능한 RAM이 부족할 수 있습니다. 문자열 대신 값을 저장하려고하면 다음과 같은 문자열을 만들 때 압축 지점이 제거됩니다.

$string_after_compression = "000100100011"; 
#split it by 4 bits per = "0001" . "0010" . "0011"; 

-----

이 질문은 조금 복잡하지만 목적은 다음과 같습니다

$binary_var = (binary) 0001; 
: 는 PHP의 intigers

예 솔루션을 사용하여 PHP 변수를 할당하는 방법이 있나요

+0

당신이 봤어 : http://php.net/manual/en/function.decbin.php, 설명서에 명시된 바와 같이, "주어진 숫자 인수의 이진 표현을 포함하는 문자열을 반환합니다."는 예를 통해 목표로하는 것처럼 보입니다. – vincenth

+0

그래, 이전에 한번 살펴 봤는데 흥미 롭다고 생각했지만 구현할만한 가치가 있을지 모르지만'decbin/bindec' 함수에서'int'를 반환한다고 생각합니다. :-) – Jek

+0

[pack] (http://php.net/manual/en/function.pack.php) – cske

답변

3

PHP에서 바이너리로 작업하려면 원하는 데이터 유형이 문자열이어야합니다. 문자열이 단순한 바이트 배열 때문에 :

$bytes = ''; 

는 PHP에서 바이너리 (0100101)에 대한 간단한 기본 2 표기법, 바이너리와 함께 작업 할 수 일반적으로 다음 최선의 선택은 hex notation있다 없다 :

$bytes = "\x42"; // 0100 0010 

당신은거야 기본 2 표기법과 기본 16 표기법을 머리에서 앞뒤로 변환해야하지만 일단 익숙해지면 일반적으로 1과 0의 긴 문자열보다 쉽게 ​​따르고 작업 할 수 있습니다.

테스트 또는 바이너리 데이터를 조작하면 binary operators에 익숙해 싶을 것이다하려면 :

if (($bytes[3] & "\x02") === "\x02") { 
    // the second bit of the forth byte in the sequence is set (0000 0010) 
} 

$bytes[6] |= "\x02"; // setting the second bit of the seventh byte 
+0

고마워! 그냥 16 진법과 2 진법을 읽으면서 기꺼이 친구를 사귈 수 있습니다. :-) – Jek

관련 문제