Преобразовать 8 байт в double

MAXUS

Новичок
Добрый день!

Проблема следующая...

Получаю из потока 8 байт, которые должны составлять double. Считываю так: fread($file, 8)...
Как полученное преобразовать в double? Если сделать так bin2hex(fread($file, 8)), то получаю:

406429c28f5c28f6 - знаю, что это 161,305 (это правильное ожидаемое значение) ,но как это в php вычислить?

unpack('d', fread($file, 8)) возвращает -1.4982749068389E+261...

Может, потому что у меня система 64-разрядная?

Подскажите, как получить double?
 

AnrDaemon

Продвинутый новичок
Не надо ничего переворачивать. Читайте код, прежде чем делать выводы.
bin2hex даёт результат - шестнадцатиричное число. Число! А не бинарное его представление.
Бинарным (little-endian, обычное для x86 систем) представлением числа 0x406429c28f5c28f6 будет последовательность байт f6 28 5c 8f c2 29 64 40.
 

MAXUS

Новичок
Не надо ничего переворачивать. Читайте код, прежде чем делать выводы.
bin2hex даёт результат - шестнадцатиричное число. Число! А не бинарное его представление.
Бинарным (little-endian, обычное для x86 систем) представлением числа 0x406429c28f5c28f6 будет последовательность байт f6 28 5c 8f c2 29 64 40.
Эдак вы всех запутаете. Я считываю файл формата FLV. В описании формата указано:

Unlike SWF files, FLV files shall store multi-byte numbers in big-endian byte order. For example, as a UI16 in
SWF file format, the byte sequence that represents the number 300 (0x12C) is 0x2C 0x01; as a UI16 in FLV file
format, the byte sequence that represents the number 300 is 0x01 0x2C

Т.е. все многобайтовые величины хранятся в big-endian порядке, соответственно, прежде чем конвертировать, их надо перевернуть в little-endian. Собственно, это и подсказал Вурдалак. Только после его подсказа я обратил внимание на эту строчку в описании формата. Поэтому 0x406429c28f5c28f6 никак не давало 161.305. Вы бы сами попробовали...
 

MAXUS

Новичок
Стоит задача разобраться, как это делается, а не найти готовое решение. Применяться, возможно, будет во flash, а где экспериментировать, принципиальной разницы не вижу. Мне быстрее ковырять в php.
 

MAXUS

Новичок
И зачем это писать на php? А раз уж на php, то почему не поискать готовые решения?) https://github.com/PHP-FFMpeg/PHP-FFMpeg
К тому же предварительно изучено достаточно много решений. В том числе ffmpeg и т.п. В том числе php-версия FFMPEG. Если найдете flash-решение буду признателен.
 
Сверху