Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с файлами, бинарными 
V
    Опции темы
Lеstat
Дата 31.1.2006, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 28.12.2005
Где: Москва

Репутация: нет
Всего: нет



Mal Hack, не структуру я прально использую...
я уже писал программу только на java
все работало, так что теперь нужно переписать кусок на пхп который просто выдаст число из файла

в яве я получаю число из этих 4 байт вот таким кодом
Код

//пропускаю 3*4 байта
//читаю 4 следующих байта в file
size = (file[3] & 0xff) << 24 | (file[2] & 0xff) << 16 |  (file[1] & 0xff) << 8 |  (file[0] & 0xff);
//size получается правильное целое число

а вот в пхп не могу что-то

Ciber SLasH, да работают, но я не знаю как их заюзать для моего случая... ща попробую, но мне кажется не прокатит
PM MAIL ICQ   Вверх
Lеstat
Дата 1.2.2006, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 28.12.2005
Где: Москва

Репутация: нет
Всего: нет



после долгих мучений с пхп, бинарным файлом и виндовским калькулятором я кое что прояснил

число 199000 в hex выглядит как 30958
вот эта функция
Код

function makehex($st)
{
for($i=3; $i>=0; $i--) $hex[]= sprintf ("%2X", ord($st[$i]));
return join (" ",$hex);
}

обрабатывая мои четыре байта выдает 0 3 9 58
я сперва подумал, что тут перепутаны два байта в числах 3 0 9 58 и 0 3 9 58
но функция вписывает второй байт как 9, а не 09... таким образом числа в которых байты записаны одним символом отображаются неправильно т.к. 30958, например, должно составляться из значений 00 03 09 58, а в моем случае составлялось из 0 3 9 58 что приводит к отсутствию ноля перед девяткой
для того чтобы все было нормально нужно исправить sprintf ("%2X", ord($st[$i])) на sprintf ("%02X", ord($st[$i])), тогда нули будут добавляться!



вобщем написал функцию, которой скармливаем массив байтов (строку из файла), а она выдает число
как читать из файла вроде не важно... у меня и с fgets(), и с fread() работает одинакого
Код

function readdec($bytes)
{
for($i=strlen($bytes)-1; $i>=0; $i--) $hex[]= sprintf ("%02X", ord($bytes[$i]));
return hexdec(join(" ",$hex));
}


всем спасибо... буду очень рад если эта тема кому-нить поможет в аналогичной ситуации
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1265 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.