为什么pack()
为签名和无符号格式代码提供相同的结果?
http://php.net/manual/en/function.pack.php
请注意,仅对有符号值和无符号值进行区分 影响函数unpack(),其中function pack()给出相同的函数 有符号和无符号格式代码的结果。
答案 0 :(得分:2)
打包整数是32/64位双字/ qword,它不保存信息是否为有符号整数。解读最高位仅在拆包阶段。
我强烈建议您查看有关数据格式的 API服务器的文档。除了对sing bit的解释外,还应该提到整数的长度和byte order。
另外,请阅读
警告请注意,PHP在内部将整数值存储为与机器相关的大小(C类型长)的有符号值....
您提到的页面的一部分。
使用二进制数据,您有责任确保正确包装。即如果 API服务器需要签名32int,则应确保发送的整数不超过2,147,483,647(0x7FFF FFFF),否则将被解释为负数;反之亦然,如果 API服务器期望无符号的int32,那么你想要打包一个有符号整数的难度并不重要 - 结果将被解压缩为正数