为什么PHP使用Zend_Amf将数字16转换为float(6.1026988574311E_32
发布时间:2020-12-13 21:35:21 所属栏目:PHP教程 来源:网络整理
导读:Zend_Amf规范声明从flash返回的Number类型将映射到 PHP中的float.精细.但是为什么16号作为6.1026988574311E_320返回?在OS X上运行的PHP版本为5.2.9. 我已经尝试在PHP中强制转换为整数(上面的值被舍入为0),并且还使用int(16)从Actionscript中强制转换 – 后
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 *)(&d); uint8_t *c = (uint8_t *)(&d); size_t j; printf("%08x %08x %lgn",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 %lgn",d); return 0; } 在Intel(小端处理器)上,您可以获得此输出 40300000 00000000 16 00000000 00003040 6.1027e-320 你是在PPC Mac(大端)上运行吗?似乎您的一个工具在您的架构上没有做正确的事情.提交供应商的错误. 作为一个hacky解决方法,我建议将您的数字转换为字符串,然后将其转换回另一端的double. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |