为什么PHP使用Zend_Amf将数字16转换为float(6.1026988574311E_320)

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了为什么PHP使用Zend_Amf将数字16转换为float(6.1026988574311E_320)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
Zend_amf规范声明从flash返回的Number类型将映射到 PHP中的float.精细.但是为什么16号作为6.1026988574311E_320返回?在OS X上运行的PHP版本为5.2.9.

我已经尝试在PHP中强制转换为整数(上面的值被舍入为0),并且还使用int(16)从Actionscript中强制转换 – 后者通过NULL来实现.如何确保Flash通过AMF返回一个整数并且PHP可以处理它?

解决方法

你有一个经典的字节序问题.看起来像Zend或flash使用这个双精度的字节顺序做错了.这是一个打印double(及其十六进制值)的程序.然后它会反转字节序并再次打印它.

#include <stdio.h>
#include <stdint.h>

int main(void)
{
  double d = 16;
  uint32_t *i = (uint32_t *)(&amp;d);
  uint8_t *c = (uint8_t *)(&d);
  size_t j;

  PRintf("%08x %08x %lg\n",i[1],i[0],d);

  for(j = 0; j < sizeof(double) / 2; j++)
  {
        uint8_t tmp;

        tmp = c[j];
        c[j] = c[sizeof(double) - j - 1];
        c[sizeof(double) - j - 1] = tmp;
    }

  printf("%08x %08x %lg\n",d);

  return 0;
}

Intel(小端处理器)上,您可以获得此输出

40300000 00000000 16
00000000 00003040 6.1027e-320

你是在PPC Mac(大端)上运行吗?似乎您的一个工具在您的架构上没有做正确的事情.提交供应商的错误.

作为一个hacky解决方法,我建议将您的数字转换为字符串,然后将其转换回另一端的double.

脚本宝典总结

以上是脚本宝典为你收集整理的为什么PHP使用Zend_Amf将数字16转换为float(6.1026988574311E_320)全部内容,希望文章能够帮你解决为什么PHP使用Zend_Amf将数字16转换为float(6.1026988574311E_320)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。