簡體   English   中英

用 PHP 簽名的二進制到十進制 32bit

[英]Binary to Decimal 32bit signed with PHP

我目前有一個 Decimal 作為:4294960896

然后使用 function 將其轉換為二進制:

decbin('4294960896')

等於:11111111111111111110011100000000

然后我需要獲取該二進制文件並將其轉換為 32 位簽名版本,該版本應為“-6400”

我似乎找不到任何支持 32 位簽名 output 的內置函數。

數字 4294960896 的十六進制表示是 FFFFE700h。 這應該被解釋為 32 位有符號長。 支持此類任務的函數是packunpack

$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格式進行(未)打包似乎更合乎邏輯,以保持機器獨立性。 雖然寫了很多測試,以確保它有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM