如何在php中将字节数组转换为整数?

Posted

技术标签:

【中文标题】如何在php中将字节数组转换为整数?【英文标题】:How to convert byte array to integer in php? 【发布时间】:2012-10-02 02:37:51 【问题描述】:

我看过一个将整数转换为字节数组的代码。下面是如何在php 3中将整数转换为字节数组(How to convert integer to byte array in php)的代码:

<?php

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

print_r($ar);
?>

上面的代码会输出:

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

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

谁能帮我解决这个问题。我会是一个很大的帮助。先谢谢了。

【问题讨论】:

尝试为此进行类型转换。 Reverting unpack('C*', "string")的可能重复 Here 是如何在 PHP 中将字节数组转换为浮点数。 【参考方案1】:

为什么不把它当作数学题呢?

$i = ($ar[3]

【讨论】:

哇,这解决了我的问题,但我将代码更改为: $i = ($ar[4] 【参考方案2】:

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

$ar = [64,226,1,0];
$i = unpack("L",pack("C*",$ar[3],$ar[2],$ar[1],$ar[0]));

【讨论】:

【参考方案3】:

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

$temp = ($ar[0]<<24) + ($ar[1]<<16) + ($ar[2]<<8) + ($ar[3]);
if($temp > 2147483648)
     $temp -= 4294967296;

【讨论】:

值得一提的是,x64 PHP 构建(Windows 除外)需要此解决方法。并且代码中有一个错误。比较必须是greater or equal 而不仅仅是greater

以上是关于如何在php中将字节数组转换为整数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在c ++中将int数组转换为字节数组[重复]

如何在lua中将UTF8字节数组转换为字符串

如何在 iPhone 中将 NSData 转换为字节数组?

如何在c ++中将数组字节转换为字符串?

如何在Java中将二维布尔数组转换为一维字节数组?

如何在 C# 中将结构转换为字节数组?