![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| imm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 27.7.2005 Репутация: нет Всего: 1 |
Добрый день,
У меня есть файл в котором много всякой инфы и создается он не с помощью php, но это не важно. Если вы поможите мне решить задачу ниже, то все остальное тоже вполне решается. Дано: файл в котором в бинарном виде находится два числа одна в начале файла на 4 байта, а другое сразу после него на 2 байта. Нужно: получить эти два числа. За ранее благодарен. |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
чем отличается от обычного чтения?
остаётся только проверок накидать, ну и может использовать fread вместо fgets, но это уже по задаче |
|||
|
||||
| imm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 27.7.2005 Репутация: нет Всего: 1 |
Эх думал обойдусь без примера...
Например для однобайтового числа 238 в файле будет текстовая "й", т.е. символ с кодом 238, а если число на 4 байта... |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
значит там будет четыре байта символов ? (йцуе) ? тогда substr($str, 0, 4); Добавлено через 1 минуту и 35 секунд получили символы, затем режем их с помощью удобной нам функции и преобразуем в коды по методике (если это ascii, то ord($dig1[0])) |
|||
|
||||
| mishaSL |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1046 Регистрация: 10.1.2007 Где: Санкт-Петербург Репутация: 19 Всего: 54 |
imm, пример этих 6 байт покажите.
-------------------- Лучший способ научиться программированию - это посмотреть как это делают другие... |
|||
|
||||
| flashaa |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
Код символа(его числовое значение) вычисляется ф-цией ord().
Cоотвественно считать первые 4 байта и получить их как число будет выглядеть так:
Тут последовательно вычисляется код каждого символа и затем преобразуется в двоичную форму (01002..). Если поставить рядом все такие нолики и единички от каждого символа, то получится искомое четырехбайтовое число. В десятичном представлении. Затем преобразуем число в десятичную форму. Я мог напутать со старшинством байтов, т.е старшие байты может быть надо добавлять слева, а не справа, при сборе числа в двоичной форме. Если не будет работать, попробуйте сделать так
Это сообщение отредактировал(а) flashaa - 12.3.2008, 17:03 |
||||
|
|||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Угу, а про pack/unpack кто-нибудь слышал?
Это сообщение отредактировал(а) ksnk - 12.3.2008, 17:29 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| imm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 27.7.2005 Репутация: нет Всего: 1 |
Спасибо
ksnk, именно то что нужно. |
|||
|
||||
| flashaa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
Да, с pack значительно короче.
|
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |