Я не знаю полностью, что происходит в вашей ситуации, но я думаю, что смогу частично осветить то, что происходит с вашим кодом. Я провёл следующий быстрый взлом, чтобы проверить теорию:
void hexdump_double(double dbl)
{
assert(8 == sizeof(dbl));
printf("double: %02X %02X %02X %02X %02X %02X %02X %02X (%lg)\n",
((char *)&(dbl))[0],
((char *)&(dbl))[1],
((char *)&(dbl))[2],
((char *)&(dbl))[3],
((char *)&(dbl))[4],
((char *)&(dbl))[5],
((char *)&(dbl))[6],
((char *)&(dbl))[7],
dbl);
}
int main()
{
hexdump_double(6.1026988574311E-320);
}
, который дает какой-то захватывающий результат:
double: 40 30 00 00 00 00 00 00 (6.1027e-320)
Как видите, это маленькое число с плавающей запятой - это не случайный набор битов. Тем не менее, он также не имеет отношения к «16».
Если в документации Zend_Amf указано, что тип числа ActionScript возвращается как число с плавающей точкой PHP, подразумевается class Number
, задокументированный Adobe: Документация по Adobe.com Flex . Это не означает, что любое «число» будет передано как двойное число.
Int со значением меньше 2 ^ 29 будет возвращено в AMF как целочисленный тип, и я предполагаю, что Zend_Amf вернет это как целое число.
Как вы передаете объект AMF из вашего ActionScript? Возможно ли сбросить отправляемые байты?