2016-04-03 76 views
1

为什么pack()给出了相同的结果符号和无符号格式代码?PHP包功能

http://php.net/manual/en/function.pack.php

注意符号和无符号值之间的区别仅 影响函数解包(),其中为功能包()给出了同样的结果 有符号和无符号格式代码。

+3

因为它是这样实现的吗? –

+0

@AlexBlex为什么?我想打包有符号整数将其发送到API,这很重要吗?也许API服务器解包错了。 – Cooper

回答

2

打包整数是一个32/64位dword/qword,它不包含是否为有符号整数的信息。最高位的解释仅在拆包阶段进行。

我强烈建议检查文档关于数据格式API服务器。除了解释单数位之外,还应该提及整数的长度和byte order

另外,请阅读

注意注意,PHP内部存储整数值作为机器相关的尺寸(C型长)的带符号的值....的

部分您提到的页面。

处理二进制数据这是你的责任,以确保正确的包装。即如果API服务器预计签署32int,你应该确保你发不超过2,147,483,647(0x7FFF的FFFF)的整数,否则会被解释为负数;反之亦然,如果API服务器预计无符号INT32,这不要紧,你如何努力想要收拾符号整数 - 结果将被解包为正数。