【问题标题】:Convert float to array of bytes in PHP将浮点数转换为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 来做。有可能吗?

【问题讨论】:

标签: php floating-point pack unpack


【解决方案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"
猜你喜欢
  • 2016-08-21
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多