Помогите познать функцию [un]pack

Yaponchick

Новичок
Помогите познать функцию [un]pack

Здраствуйте.
Пытаюсь разобратся для чего нужна pack/unpack, понял что конвертирует в бинарные данные.
Но не могу понять алгоритм форматов.

Допустим, имеем:
PHP:
<?php
print_r(($enc = pack("H4H4", 0x1234, 0x5678))."\n\n\n"); 
print_r($dec = unpack("H4int1/H4int2", $enc));
print "\n\n";
foreach($dec as $k => $v){
	printf("%s => %s\n", $k, dechex($v));
}
?>
выводит:
Код:
F`"


Array
(
    [int1] => 4660
    [int2] => 2213
)


int1 => 1234
int2 => 8a5
Где ошибка ? =(((

P.S. Фанат, будь добр, разреши мне в этой теме задавать вопросы по pack'у =)
P.S.S. В мануале мало чего написано, трудно понять.
 

Andreika

"PHP for nubies" reader
Yaponchick
1. если уж пишешь код и текст ошибки, то постарайся чтобы они друг другу соответствовали... т.е. в 3ей строке должна быть функция pack

2. наскока я понял из прочитанного пару часов назад мануала -
H - 1 байт .. после него идет указание кол-ва этих H (байтов) у тебя оно 2
каждый символ (+размер) - один параметр функции pack

итог: взять 2 байта из 1 параметра.. причем 1ый параметр это число - 4 байта...
что у тебя доолжно получиться мне не понятно, но в итоге 1ый параметр pack к твоим данным должен быть "H4H4"
 

Yaponchick

Новичок
Andreika
Пасиб, эффект есть, но только 50%
PHP:
print_r($enc = pack("H4H4", 0x1234, 0x5678)."\n\n\n"); 
print_r($dec = unpack('H4H4', $enc));
...
foreach($dec as $k => $v){
	printf("%s => %s\n", $k, dechex($v));
}
->>
Код:
F`"
Array
(
    [H4] => 4660
)


H4 => 1234
не соответствие строк, из-за того, что я удалил пустые строки =)

Дополнение:
Если можете, приведите 4 примера pack + unpack: числа(инт), числа(флоат), буквы(стринг), буквы+числа(стринг)
 

Yaponchick

Новичок
PHP:
print_r($dec = unpack("H4int1/H4int2", $enc));
Array
(
    [int1] => 4660
    [int2] => 2213
)


int1 => 1234
int2 => 8a5
 

SiMM

Новичок
> Где ошибка ? =(((
Какая ошибка?
4660 = 0x1234
2213 = 0x8a5

0x5678 = 22136
PHP:
print_r(($enc = pack("H4H5", 0x1234, 0x5678))."\n\n\n");  
print_r($dec = unpack("H4int1/H5int2", $enc)); 
print "\n\n"; 
foreach ($dec as $k => $v)
    printf("%s => %s\n", $k, dechex($v));
 

Yaponchick

Новичок
Пасиба =)))))))
Теперь смысл ясен.
Фанат, если хочешь можешь удалить эту тему :D Спасибо, что не удалял :D
 
Сверху