我正在考虑重写我的 Arithmetic Expression Compiler 从JavaScript到PHP,这样它也可以在不支持JavaScript的浏览器中使用。一个奇怪的问题是,GNU汇编器不支持将浮点数转换为IEEE754十六进制,而是依靠编译器来实现
getIEEE754 = function (decimalNumber) { var floatArray = new Float32Array([decimalNumber]); var buffer = floatArray.buffer; var intArray = new Int32Array(buffer); return ( (highlight ? '<span style="color:#007700">' : "") + "0x" + intArray[0].toString(16) + (highlight ? "<\/span>" : "") ); };
那么,你是如何在PHP中做到这一点的呢?
使用 pack 将浮点值转换为二进制字符串。使用 unpack 以将二进制字符串转换为整数。使用 dechex 以将整数转换为十六进制表示。
pack
unpack
dechex
function getIEEE754($decimalNumber) { return '0x' . dechex(unpack('L', pack('f', $decimalNumber))[1]); }