2013-12-19 2 views
0

Хорошо, так что у меня есть немного проблем (вероятно, из-за моего невежества), выясняя это.PHP двоичная манипуляция

$binary = base64_decode("AAAAAgYA3ncsRjy9"); 

Итак, у меня есть 12 байт двоичных данных, да?

Мне нужно, чтобы превратить это в:

$binary = array("0"=>"00000000", "1"=>"00000000", "2"=>"00000000", "3"=>"00000010", "4"=>"00000110", "5"=>"00000000", "6"=>"11011110", "7"=>"01110111, "8"=>"00101100", "9"=>"01000110", "10"=>"00111100", "11"=>"10111101"); 

И, в конечном счете, падение первые 6 байт, и разделить остальные на 2 пары байт.

$binary = array("0"=>"1101111001110111", "1"=>"0010110001000110", "2"=>"0011110010111101" 

Затем преобразуйте эти 2 байта в базу 10 десятичных знаков.

Причина, по которой я решил включить фактические данные, заключается в том, что я хочу убедиться, что использую правильную терминологию. Я пытался работать с упаковкой/распаковкой и просто не смог это сделать, вероятно, из-за того, что не понял разные доступные варианты аргумента формата.

Я уверен, что я очень смущаюсь в своих объяснениях, пожалуйста, примите мои извинения. Любая помощь будет принята с благодарностью.


EDIT:

Для потомков:

PHP Manual - function.pack

PHP Manual - function.unpack

PHP Manual - function.call-user-func-array

ответ

3

Это следует сделать это:

$binary = base64_decode("AAAAAgYA3ncsRjy9"); 
$binary = substr($binary, 6); 
var_dump(unpack("n*", $binary)); 

n is unsigned short (всегда 16 бит, большой порядок байтов). С * этот формат используется для всех оставшихся данных.

+0

Желание я мог бы дать +100 для этого ответа! –

+0

Абсолютно замечательно просто. Вопрос, если я могу: если двоичные данные просто обрабатываются как строка, и, следовательно, substr является доступной функцией, почему она печатает/выдает «Þw, F <½»? –

+1

@SamanthaP 'base64_decode' возвращает строку, а текст, который вы видите, - это символы, которым соответствуют данные. – Gumbo

Смежные вопросы