我目前有一个十进制,它是: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);
使用L
和l
格式进行(取消(打包似乎更合乎逻辑,以保持其与机器无关。尽管如此,还是写了很多测试,以确保它有效。