将浮点数转换为PHP中的字节数组
Posted
技术标签:
【中文标题】将浮点数转换为PHP中的字节数组【英文标题】:Convert float to array of bytes in PHP 【发布时间】:2015-11-17 09:05:00 【问题描述】:我需要将一个浮点值转换为 4 个字节。
在 javascript 中,我通常使用以下代码:
var farr = new Float32Array(1);
farr[0] = 26.75;
var barr = new Int8Array(farr.buffer);
console.log(barr[0]+","+barr[1]+","+barr[2]+","+barr[3]);
//26.75 => 0,0,-42,65
//26.85 => -51,-52,-42,65
我想用 php 而不是 javascript 来做。有可能吗?
【问题讨论】:
反之亦然enter link description here 【参考方案1】:尝试使用pack和unpack函数:
$f = 26.75;
$ar = unpack("c*", pack("f", $f));
print_r($ar);
结果:
Array
(
[1] => 0
[2] => 0
[3] => -42
[4] => 65
)
你可以找到一个sn-p here
【讨论】:
谢谢,但是我没有得到与使用 javascript 相同的值。如果您尝试我的 2 个示例,现在的值不同:26.85 给出 205 204 222 65 @Biribu 205 - 256 = 51,其他数字相同,如果数字大于 128,则应将数字减去 256,以补偿 php 未给出数字签名(或 javascript 给出数字未签名) ) 完美。谢谢。 @Biribu,只需使用签名字符'c':unpack("c*", pack("f", $f));
对于 ModBus 浮点表示你必须使用 'v*':unpack("v*", pack("f", $f));
这会导致两个寄存器小端 uint16 "float"以上是关于将浮点数转换为PHP中的字节数组的主要内容,如果未能解决你的问题,请参考以下文章