подскажите плиз как на пыхе реализовать сабж ? имеет массив состоящий из 8 чисел размерностью unsigned chart по стандарту IEEE754 необходимо интерпретировать их как double число тоесть как то склеить на пхп 8 байт чтобы на выходе был double
вау... ну ладно раз так плохо написана суть проблемы. разжую досконально . в машинном представлении число double занимает 8 байт памяти ( по крайней мере в той реализации которую мы используем на сервере ) в БД массив данных хранится как bytea формат стоит задача вывести корректно лог. проблем с числами типа integer нет. обратное преобразование очень простое $valint = $stream[ 0 ] | ( $stream[ 1 ] << 8 ) | ( $stream[ 2 ] << 16 ) | ( $stream[ 3 ] << 24 ) - получаем на выходе int32 число по его "машинному" представлению в памяти машинному в кавычках хотя по сути в массиве $stream - дамп куска памяти сервера где лежат данные ( структуры: числа char, int, float и double ) просто в пхп мы не можем к сожалению напрямую обращатьсяк памяти и через memcpy формировать числа. вопрос стоит в том как из массива байт, например, { 0x00, 0x02, 0x23, 0xFF, 0xFD, 0x00, 0xCC, 0x01 } получить в php double число
вы сейчас посмеялись? int не double :-( { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 } - если к примеру этот массив "склеивать" аналогично инту то как integer будет число 1 но это машинное представление числа double 7.2911220195563975e-304 машинное представление чиста 1.0 это { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f }
Код (PHP): $string='0x00, 0x02, 0x23, 0xFF, 0xFD, 0x00, 0xCC, 0x01'; $string=explode(',',$string); $string=join('',$string); $string=(double)join('',unpack('H*',$string)); echo $string; // 3.0783030203078E+77 Или я чего-то не то?
а нет такой строки. в $stream именно массив из чисел 0 2 23 ff fd 00 cc 01 0x23 - это не строка. это число 23H в 16 ричной системе счисления
я знаю как преобразовывать из одной СС в другую я не знаю как массив из 8 байт преобразовать в пхп в double число
Ну, а что не понятного, динамический типизированный язык всегда будет медленнее статически типизированного... К тому же в php отсутствует JIT компилятор. Да и вообще тут типы проверяются на этапе выполнения, вместо того, чтобы компилировать... Зато в С, нужно больше времени, чтобы собирать проект Но вот таки, ускорить думаю акселераторами можно...
да все ясно - каждому языку свою нишу применения. никто же не пишет на пыхе прикладной или системный софт ) смотря что вы под сборкой php понимаете у меня за 2-3 секунды компилируется и линкуется С++ проект из примерно 500 cpp и h файлов ( много оперативы + SSD диск + core I7 творят чудеса ) Добавлено спустя 48 секунд: можно свой модуль написать для апача или пыха.
Есть такие кто пишет и уже обсуждалось... Интерпретатор и этим все сказано. От-того, что там файлы, мало, чего значит, скорее тут будет зависеть от концепции скриптов и от их тяжести... Так как фактически файл ничего не весит по умолчанию. И на сколько будет завернут проект и его структура, компилятор может немного и подумать. Компиляция всего+выполнение...
забиваем в яндексе или гугле иеее754, переходим по ссылкам, в итоге находим алгоритм (или даже реализацию на яваскрипте или с), переделываем на пхп ... профит. вот например http://www.softelectro.ru/ieee754.html или вот что-то похожее из моей программы Код (Text): private function convert_f($s_value) { $a_value = unpack('N', $s_value); $n_value = $a_value[1]; $n_sign = ($n_value >> 31) ? -1 : 1; $n_exp = ($n_value >> 23) & 0xff; $n_mant = ($n_exp == 0) ? ($n_value & 0x7fffff) << 1 : ($n_value & 0x7fffff) | 0x800000; $n_exp -= 150; $f_value = $n_sign * $n_mant * pow(2, $n_exp); return $f_value; }