簡體   English   中英

從PHP中的Java DataOutputStream讀取二進制數據時的整數格式是什么?

[英]What integer format when reading binary data from Java DataOutputStream in PHP?

我知道這可能不是最好的主意,但我一直在嘗試讀取使用Java的DataOutputStream編碼的PHP文件。

具體來說,在Java中我使用:

dataOutputStream.writeInt(number);

然后在PHP中我使用以下方法讀取文件:

$data = fread($handle, 4);
$number = unpack('N', $data);

奇怪的是PHP中唯一給出正確值的格式字符是'N',它應該表示“無符號長(總是32位,大端字節順序)”。 我以為java中的int總是簽名?

是否可以以這種方式可靠地讀取用Java編碼的數據? 在這種情況下,整數只需要是正數。 它可能還需要非常大,因此writeShort()是不可能的。 當然,我可以使用XML或JSON等。

這很好,只要你不需要額外的位。 l (而不是N )可以在大型端機上運行。

但請注意,您可以存儲的最大數量是2,147,483,647,除非您想在Java端進行一些數學計算以獲得正確的負整數來表示所需的無符號整數。

請注意,帶符號的Java整數使用二進制補碼方法來表示負數,因此它不像翻轉那么容易。

DataOutputStream.writeInt

將int作為四個字節寫入基礎輸出流,首先是高字節。

可用於有符號整數的解包函數的格式都使用機器相關的字節順序。 我的猜測是你的機器使用的字節順序與Java不同。 如果是這樣,則DataOutputStream + unpack組合將不適用於任何已簽名的基元。

暫無
暫無

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

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