将浮点数转换为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】:

尝试使用packunpack函数:

$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中的字节数组的主要内容,如果未能解决你的问题,请参考以下文章

将浮点数与数组中的值进行比较时,“TypeError:只能将整数标量数组转换为标量索引”

如何在java中将4字节数组转换为浮点数

编辑存储在字节数组中的数据

如何将浮点数保存为 2 个字节?

Abplc浮点数怎么传给4个字节

如何在php中将字节数组转换为整数?