Как преобразовать массив байтов в целое число в php?
Я видел код, который преобразует целое число в байтовый массив. Ниже приведен код Как преобразовать целое число в байтовый массив в 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
Кто-нибудь может мне помочь с этим. Я был бы большой помощью. Спасибо вперед.
3 ответа
Почему бы не рассматривать это как математическую задачу?
$ i = ($ ar [3]<< 24) + ($ ar [2] << 16) + ($ ar [1] << 8) + $ ar [0];
Поскольку длина L составляет четыре байта, вы знаете количество элементов массива. Поэтому вы можете просто выполнить операцию в обратном порядке:
$ar = [64,226,1,0];
$i = unpack("L",pack("C*",$ar[3],$ar[2],$ar[1],$ar[0]));
Чтобы получить 4-байтовое значение со знаком в PHP, вам нужно сделать следующее:
$temp = ($ar[0]<<24) + ($ar[1]<<16) + ($ar[2]<<8) + ($ar[3]);
if($temp > 2147483648)
$temp -= 4294967296;