Сейчас на форуме: (+2 невидимых)

 eXeL@B —› Оффтоп —› Помогите оптимизировать перевод dword массива в hex строку и обратно на PHP
Посл.ответ Сообщение


Ранг: 450.3 (мудрец), 13thx
Активность: 0.20
Статус: Участник

Создано: 20 февраля 2011 01:57 · Поправил: ToBad
· Личное сообщение · #1

Интересует именно быстрота перевода в обе стороны. Вариант с serialize не то, что нужно. Массив переменной длинны с 32-битными значениями в HEX. Сейчас сделал так:
Code:
  1. <?
  2. // Заполнили массив
  3. $dw[]=0x12345678;
  4. $dw[]=0x11223344;
  5. $dw[]=0x77778888;
  6.  
  7. // Вывели значения
  8. print_r($dw);
  9.  
  10. // Перевели в HEX строку
  11. $d='';
  12. foreach ($dw as $val) $d.=pack('I',$val);
  13. $d=array_shift(unpack('H*',$d));
  14.  
  15. // Вывели
  16. echo $d;
  17.     
  18. // Перевели HEX строку в другой массив    
  19. $dw2=array_values(unpack('I*',pack('H*', $d)));
  20.  
  21. // Вывели значения массива
  22. print_r($dw2);
  23. ?>


Результат такой:
Code:
  1. Array ( [0] => 305419896 [1] => 287454020 [2] => 2004322440 ) 
  2. 785634124433221188887777
  3. Array ( [0] => 305419896 [1] => 287454020 [2] => 2004322440 )


Работает правильно, но думаю можно более быстро. Помогите пожалуйста оптимизировать.



Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 21 февраля 2011 11:27
· Личное сообщение · #2

может не то

php.net/manual/en/function.base-convert.php

и там в комментах много чего интересного

| Сообщение посчитали полезным: ToBad


Ранг: 450.3 (мудрец), 13thx
Активность: 0.20
Статус: Участник

Создано: 21 февраля 2011 17:48 · Поправил: ToBad
· Личное сообщение · #3

Av0id пишет:
может не то

http://php.net/manual/en/function.base-convert.php

и там в комментах много чего интересного


Спасибо! В комментах действительно много интересного! Пока их читал, парралельно пробивал непонятные моменты в гугле. В итоге заменил самый тормознутый код на новый.
Этот:
Code:
  1. // Перевели в HEX строку
  2. $d='';
  3. foreach ($dw as $val) $d.=pack('I',$val);
  4. $d=array_shift(unpack('H*',$d));

На этот:
Code:
  1. function ArrayToHex($array)
  2. {
  3.     array_unshift($array, 'I*');
  4.     $res = unpack('H*', call_user_func_array('pack', $array));
  5.     return $res[1];
  6. }

Работает раза в два быстрее!
Думаю уже оптимизировать особо нечего, но если у кого есть идеи - буду рад!
p.s. Если можно не закрывайте топик, может чем дополнится.


 eXeL@B —› Оффтоп —› Помогите оптимизировать перевод dword массива в hex строку и обратно на PHP

У вас должно быть 20 пунктов ранга, чтобы оставлять сообщения в этом подфоруме, но у вас только 0

   Для печати Для печати