我有一个包含这些值的数组(当使用 print_r();
Array:
[0] => 66
[1] => 233
[2] => 204
[3] => 205
十六进制的值是:
Array:
[0] => 0x42
[1] => 0xE9
[2] => 0xCC
[3] => 0xCD
我要做的是将这个 4 字节数组转换为浮点值。如果我使用 implode();
将数组转换为一个值,它只是将字符串合并为 66233204205
而不是 0x42E9CCCD
,它们不相似.因此我不能使用 floatval()
。 PHP 对我来说是新手,使用字符串值而不是实际位也是如此,就像我在 C 中可以做的那样。
我在想的是如何用十六进制值implode()
它,而不是那些整数,然后使用floatval()
。
有什么想法吗?
编辑:
为了更清楚一点,我应该得到 116.900
作为结果
最佳答案
您必须执行一个简单的数学运算,将数组的十六进制值一个接一个地连接起来。该算法将是这样的:
- 将数组的第一个十六进制值分配给结果变量,在本例中为
$concat
。 - 使用
for
循环从第 2 个元素到第 n 个元素循环遍历数组 在循环的每次迭代中,将结果变量的现有十六进制值左移 8 倍,并将新的十六进制值放在结果变量的最低有效 8 位中。
// Suppose $array is your original array $concat = $array[0]; $count = count($array); for($i = 1; $i < $count; $i++){ $concat = ($concat << 8) + $array[$i]; } // display concatenated hex value: 42e9cccd var_dump(dechex($concat)); // Now do your operation on the concatenated hex value
这是一个演示,https://eval.in/844793
关于php - 在 PHP 中将值数组转换为单个浮点值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45654601/