我知道这可能不是最好的主意,但我一直在尝试使用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等。
答案 0 :(得分:2)
这很好,只要你不需要额外的位。 l
(而不是N
)可以在大端机器上运行。
但请注意,您可以存储的最大数量为2,147,483,647,除非您想在Java端进行一些数学运算以获得正确的负整数来表示所需的无符号整数。
请注意,带符号的Java整数使用二进制补码方法来表示负数,因此它不像翻转那么容易。
答案 1 :(得分:2)
将int作为四个字节(高字节)写入基础输出流 第一
可用于有符号整数的解包函数的格式都使用机器相关的字节顺序。我的猜测是你的机器使用的字节顺序与Java不同。如果是这样,则DataOutputStream + unpack组合将不适用于任何已签名的原语。