2016-10-25 17 views
0

私は圧縮アルゴリズムに慣れていて、私の母国語はPHPです。私はPHPが普通は大きなアルゴリズムを作っていない言語だと理解できますが、可能かどうかは疑問でした。 (of course it's possible - more so efficient and powerfulPHPの圧縮アルゴリズム

私が作るしようと思い、アルゴリズムの第1のタイプは、最も使用されているバイト(chars)に服用し、バイナリ型に変換することで、簡単な適応アルゴリズムである、(ex: a = 0001, b = 0010, c = 0011は) - 本当ありませんカントー私が慣れ親しんでいるPHPでこれを行うには、まず、a = chr(33), b = chr(34)のような単純なASCII変換を使用していましたが、これは最も価値の低い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、ドキュメントに記載されているように、 "指定された数値引数のバイナリ表現を含む文字列を返します"は、あなたのexempleで何をしようとしているかのようです。 – vincenth

+0

ええ、私はそれを前に見ましたが、面白かったと思っていましたが、実装する価値があるかもしれませんが、 'decbin/bindec'関数から' int'を返すと思います。 :-) – Jek

+0

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

答えて

3

PHPでバイナリを操作するには、選択するデータ型が文字列です。文字列は、単なるバイト配列なので:PHP(0100101)で、バイナリのためのシンプルなベース2の表記はありません

$bytes = ''; 

、通常のバイナリで動作するように次の最良のオプションはhex notationです:

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

あなた'LLベース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進数表記とBase-2表記を読んで、喜んで友人に感謝します。 :-) – Jek