![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Lеstat |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 28.12.2005 Где: Москва Репутация: нет Всего: нет |
вот проблема возникла... сперва на java, а теперь и на пхп
никак не могу получить число (интеджер) из прочитанных 4 байт из файла =( не подскажите как это можно провернуть? |
|||
|
||||
| wsr |
|
|||
![]() Fuzzy Logic ![]() Профиль Группа: Участник Сообщений: 142 Регистрация: 3.7.2005 Репутация: 1 Всего: 2 |
Типа прочитанные данные (4байта) являются числом??? И оно точно INT???
Если да, что просто к этому числу прибавь единицу, и отними единицу, и получишь чисто INT. --------------------
ICQ : 918-318Сайт : Lock-Team |
|||
|
||||
| Lеstat |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 28.12.2005 Где: Москва Репутация: нет Всего: нет |
чето я врубиться не могу =( к какому числу единицу прибавить нужно?
вот конкретный пример
$size массив из 4 байтов вроде мне нужно число из них получить... т.е из этого массива |
|||
|
||||
| Illuminaty |
|
|||
![]() /*Антон Захаров*/ ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1238 Регистрация: 19.3.2005 Где: Россия, Казань Репутация: 6 Всего: 56 |
Вообще-то, fgets считывает строку из файла. Таким образом, у тебя в $size лежит строка, длинною в 4 символа. Далее все зависит от того, как у тебя число в файле записано...
Фрагмент файла или
|
|||
|
||||
| wsr |
|
|||
![]() Fuzzy Logic ![]() Профиль Группа: Участник Сообщений: 142 Регистрация: 3.7.2005 Репутация: 1 Всего: 2 |
Привиди пример числа полученного при чтении четырех байт.
А так по твоему примеру : $size = $size + 1; $size = $size - 1; И если значение $size действительно принадлежит диапазону целых чисел, то вот is_int ( $size ) должен вернуть TRUE, иначе значение переменной не интеджер. --------------------
ICQ : 918-318Сайт : Lock-Team |
|||
|
||||
| Janus |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 186 Регистрация: 26.9.2005 Репутация: нет Всего: 1 |
Мне не известен способ решить твою проблему. Дело в том, что РНР в твоем случае считывает именно строку, состоящую из 4 символов.
При попытке привести типы, система попытается в строке отыскать символы 0 - 9 (именно символы) и сделать число из них. РНР слишком высокоуровневый язык. Конечно, можно попробовать что-нибудь замутить с побитовыми операциями - ето может быть единственным способом. --------------------
Проект "Репликатор" |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
||||
|
||||
| Janus |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 186 Регистрация: 26.9.2005 Репутация: нет Всего: 1 |
Я предполагаю, что он записывал число, используя С++, Pascal или что-то такое. Например, так:
В этом случае, мы получим в файле 4 символа - 4 байта, которые в совокупности представляют собой бинарное представление целого числа 10 со знаком. Там должно быть что-то вроде (не знаю только, в прямом или инверсном порядке, это от компилятора зависит): #$0a#$00#$00#$00 Таким образом, чтобы получить число, нужно считать 4 символа: "\x0a", "\x00", "\x00", "\x00" Потом получить их десятичные коды: 10, 0, 0, 0 Потом каждое число перевести в шестнадцатеричный формат: a, 0, 0, 0 Потом все шестнадцатеричные строковые представления чисел свести в одну строку: 000a и преобразовать в десятичный вид: 10 Примерно так. --------------------
Проект "Репликатор" |
|||
|
||||
| Lеstat |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 28.12.2005 Где: Москва Репутация: нет Всего: нет |
вобщем так
файлик создается не мной... он уже есть и есть программа виндовская, которая показывает это число открываю файлик программой и смотрю показывает 199000 сперва я отрыл код
он выдает не 199000, а 362800 такое вот если написать echo makehex($size)."<br>"; выдает "58 9 3 0" после
выдает 0 мой код на яве в пхп тоже что-то не работает
Это сообщение отредактировал(а) Lеstat - 31.1.2006, 18:05 |
||||||
|
|||||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
||||
|
||||
| Lеstat |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 28.12.2005 Где: Москва Репутация: нет Всего: нет |
первые 12 байт пропускаю, т.к. там не нужные мне данные
в следующих 4 байтах нужное мне число на яве все нормально читается, а вот пхп не хочет...
вобщем в $size должны быть нужные 4 байта |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
Откуда ты так уверен, что тебе нужны именно эти 4 байта?
Как файл пишется? |
|||
|
||||
| Lеstat |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 28.12.2005 Где: Москва Репутация: нет Всего: нет |
а какие еще данные читать
если первые 3 числа, записанные по 4 байта каждое мне не нужны, е четвертое, записанное тоже в 4 байта, нужно |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
Lеstat как пишется сам файл исходно. Ты структуру скорее всего не правильную используешь.
|
|||
|
||||
| Ciber SLasH |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: 3 Всего: 67 |
А функции settype, intval, что не работают ?
|
|||
|
||||
| Lеstat |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 28.12.2005 Где: Москва Репутация: нет Всего: нет |
Mal Hack, не структуру я прально использую...
я уже писал программу только на java все работало, так что теперь нужно переписать кусок на пхп который просто выдаст число из файла в яве я получаю число из этих 4 байт вот таким кодом
а вот в пхп не могу что-то Ciber SLasH, да работают, но я не знаю как их заюзать для моего случая... ща попробую, но мне кажется не прокатит |
|||
|
||||
| Lеstat |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 28.12.2005 Где: Москва Репутация: нет Всего: нет |
после долгих мучений с пхп, бинарным файлом и виндовским калькулятором я кое что прояснил
число 199000 в hex выглядит как 30958 вот эта функция
обрабатывая мои четыре байта выдает 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() работает одинакого
всем спасибо... буду очень рад если эта тема кому-нить поможет в аналогичной ситуации |
||||
|
|||||
![]()
|
| Правила форума "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. |