Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reverting unpack('C*', "string")

Tags:

php

pack

unpack

I would like to know how I can reverse what this unpack function bellow performed. I think the pack function is able to reverse what unpack performed, however I'm not sure.

First I have a simple string which after unpacking it I would have an array of bytes representing such string. Now I would like to know how to reverse such array back to the original string.

<?php
$array = unpack('C*', "odd string");
/*Output: Array
(
    [1] => 111
    [2] => 100
    [3] => 100
    [4] => 32
    [5] => 115
    [6] => 116
    [7] => 114
    [8] => 105
    [9] => 110
    [10] => 103
)*/

$string = pack("which format here?", $array);

echo $string;
#Desired Output: odd string
?>

Thank you.

like image 778
Fábio Antunes Avatar asked Aug 21 '13 12:08

Fábio Antunes


2 Answers

You should use call_user_func_array to revert unpack('C*', “string”), like this:

call_user_func_array('pack', array_merge(array('C*'), $array )))
like image 132
Sahil Mittal Avatar answered Nov 01 '22 07:11

Sahil Mittal


When you're on PHP 5.6, you should consider using argument unpacking as it is about 4 to 5 times faster than using call_user_func_array:

pack('C*', ...$array);

And when you're on PHP 5.5 or lower, you should consider using ReflectionFunction, which seems to be a bit faster than call_user_func_array:

$packFunction = new ReflectionFunction('pack');
$packFunction->invokeArgs(array_merge(array('C*'), $array));
like image 30
Bert Hekman Avatar answered Nov 01 '22 06:11

Bert Hekman