Как преобразовать массив байтов в целое число в 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;
Другие вопросы по тегам