PHP相当于Python的结构格式

PHP相当于Python的结构格式,php,python,struct,pack,unpack,Php,Python,Struct,Pack,Unpack,我正在尝试将Python代码写入PHP。但我无法将PHP包格式等效为Python包格式 Python: format = "!LLLLQ" mystr = struct.unpack(format, str) 我是这样用的 $mystr = unpack("!LLLLQ", $str); // But its not working 因为没有!或PHP包中的Q 有没有办法做到这一点 Python的格式代码: PHP的格式代码: 谢谢 以下顺序: !LLLL 表示4个无符号长32位的big

我正在尝试将Python代码写入PHP。但我无法将PHP包格式等效为Python包格式

Python:

format = "!LLLLQ"
mystr = struct.unpack(format, str)
我是这样用的

$mystr = unpack("!LLLLQ", $str); // But its not working
因为没有!或PHP包中的Q

有没有办法做到这一点

Python的格式代码:

PHP的格式代码:


谢谢

以下顺序:

!LLLL
表示4个无符号长32位的big-endian格式。在PHP中,这将是:

NNNN

然而,结尾的Q是有问题的。它表示无符号长64位。PHP的pack函数不提供无符号long,如果我错了,请纠正我。

如果在PHP中使用两个4字节无符号long NN格式解包8字节无符号long,则可以对第一个长32位进行位移位,并将其添加到第二个长,以恢复8字节无符号long。在Python中

In [49]: import struct

In [50]: c = 12345678912345678912

In [51]: struct.pack('!Q', c)    # this is the packed string
Out[51]: '\xabT\xa9\x8f\x81e$@'

# unpack the string using `NN` in PHP   
In [52]: a, b = struct.unpack('!LL', struct.pack('!Q', c))  

In [53]: a, b
Out[53]: (2874452367L, 2170889280L)
该位将第一个数字移位32位,然后将其与第二个数字相加

In [54]: (a<<32)+b
Out[54]: 12345678912345678912L

你能解释一下该软件的功能是什么吗!Q是Python的还是至少是相关文档的链接?举例说明如何使用它也会很有帮助。这样,只懂PHP的人可能会想出一些等效的功能。在澄清问题时,请始终将相关细节编辑到问题本身中。记住,你留给读者的工作越少,他们就越愿意花更多的时间来帮助你回答问题。好的,我会记住的。谢谢,这就是问题所在。PHPYes中不支持“unsigned long long”,文档中对此一无所知。真不敢相信。让我再调查一下。。。
In [55]: assert (a<<32)+b == c