php - 在 PHP 中将值数组转换为单个浮点值?

标签 php arrays floating-point

我有一个包含这些值的数组(当使用 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/

相关文章:

php - 使用 PHP 移除 MS Word "HTML"

c++ - 是否存在编译时 logb/ilogb?

c++ - 为什么同一编译器的不同版本会给出不同的结果?

php - number_format() php 删除尾随零

c - Nativeint Bigarray 似乎未签名

php - Laravel(三)分页排序&过滤

php - 在 Laravel 中找不到错误列

php - HTML 表单 slider

javascript - 将对象数组推送到数组进行排序

C++ [] 具有多个参数的数组运算符?