Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Редактирование бинарных данных
Форумы портала PHP.SU » PHP » Программирование на PHP » Редактирование бинарных данных

Страниц (1): [1]
 

1. Мелкий - 28 Декабря, 2009 - 13:20:42 - перейти к сообщению
Есть бинарный файл, в котором необходимо произвести замену одного HEX значения на другое, весь HEX обработчик есть.
А вот как записать обратно изменённую HEX строку в бинарном формате?
Получилось записать только 16-ричную строку.

hex2bin функции нету, decbin(hexdec($hex)) возвращает 0
2. EuGen - 28 Декабря, 2009 - 13:33:52 - перейти к сообщению
Функция hexdec (http://php.su/functions/?hexdec) делает не совсем то, что Вам нужно.
Для конвертации числа непосредственно из 16-й системы счисления в 2-ю можете использовать
http://forum.php.su/topic.php?fo...=35&topic=66
Однако учтите, что возвращаются строки а не бинарные данные так, как они должны быть (то есть имеется ввиду, что, например 'AFF' как строка не одно и то же, что 0xAFF)
3. Мелкий - 28 Декабря, 2009 - 13:44:34 - перейти к сообщению
EuGen пишет:
Однако учтите, что возвращаются строки а не бинарные данные так, как они должны быть (то есть имеется ввиду, что, например 'AFF' как строка не одно и то же, что 0xAFF)

В том-то и вопрос. Как записать именно бинарные данные? Типа "����" при текстовом чтении.

В строку-то я и сам перевести могу, таблицу перевода из 16-ричной в двоичную систему наизусть помню.
4. EuGen - 28 Декабря, 2009 - 13:51:26 - перейти к сообщению
5. Мелкий - 28 Декабря, 2009 - 14:35:20 - перейти к сообщению
Вот, спасибо! Разобрался с pack. Получилась такая функция, обратная bin2hex:
PHP:
скопировать код в буфер обмена
  1. function hexbin($str) {
  2.         $it = strlen($str);
  3.         $ret = '';
  4.         for ($i=0;$i<$it;$i+=2) {
  5.                 $ret .= pack("H",$str[$i]) | pack("h", $str[$i+1]);
  6.                 }
  7.         return $ret;
  8. }
6. JustUserR - 28 Декабря, 2009 - 14:48:08 - перейти к сообщению
Мелкий И не забудьте когда работаете с файлом то есть его открываете заменить спецификатор r/w на rb/wb
7. Мелкий - 28 Декабря, 2009 - 14:51:50 - перейти к сообщению
Да, это само собой, помню.

 

Powered by ExBB FM 1.0 RC1