二进制到十进制32位用PHP签名



我目前有一个十进制,它是:4294960896

然后通过以下功能将其转换为二进制:

decbin('4294960896')

等于:111111111111111 001110000000

然后我需要将该二进制文件转换为32位签名版本,该版本应为"-6400">

我似乎找不到任何支持32位签名输出的内置函数。

数字4294960896的十六进制表示为FFFFE700h。这应该被解释为32位带符号长。支持此类任务的功能是打包和解包。

$i64 = 4294960896;
$i32 = unpack('l',pack('V',$i64))[1];
//int(-6400)

我使用

$i64 = unpack('L',pack('l',$decimal))[1];
$t = base_convert($i64,10,2);
$r = str_pad($t,32,'0', STR_PAD_LEFT);

使用Ll格式进行(取消(打包似乎更合乎逻辑,以保持其与机器无关。尽管如此,还是写了很多测试,以确保它有效。

最新更新