7

我见过一个将整数转换为字节数组的代码。下面是如何在 php 3 中将整数转换为字节数组的代码(如何在 php 中将整数转换为字节数组):

<?php

$i = 123456;
$ar = unpack("C*", pack("L", $i));

print_r($ar);
?>

上面的代码将输出:

//output:
Array
(
   [1] => 64
   [2] => 226
   [3] => 1
   [4] => 0
)

但我现在的问题是如何扭转这个过程。意思是从字节数组转换为整数。在上述情况下,输出将为123456

任何人都可以帮我解决这个问题。我会是一个很大的帮助。提前谢谢。

4

3 回答 3

11

为什么不把它当作数学问题来对待呢?

$i = ($ar[3]<<24) + ($ar[2]<<16) + ($ar[1]<<8) + $ar[0];

于 2012-10-02T02:56:33.970 回答
4

由于 L 是四个字节长,因此您知道数组的元素数。因此您可以简单地执行反向操作:

$ar = [64,226,1,0];
$i = unpack("L",pack("C*",$ar[3],$ar[2],$ar[1],$ar[0]));
于 2012-10-02T02:43:30.763 回答
4

为了在 PHP 中获得一个有符号的 4 字节值,您需要这样做:

$temp = ($ar[0]<<24) + ($ar[1]<<16) + ($ar[2]<<8) + ($ar[3]);
if($temp > 2147483648)
     $temp -= 4294967296;
于 2014-03-05T03:57:33.763 回答