PHP相当于Python的struct形式

2024-09-30 06:24:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用PHP编写Python代码。但我无法将PHP包格式等同于Python包格式

Python:

format = "!LLLLQ"
mystr = struct.unpack(format, str)

我是这样用的

^{pr2}$

因为没有!或PHP包中的Q。在

有什么办法达到这个目的吗?在

Python的格式代码:https://docs.python.org/2/library/struct.html

PHP的格式代码:http://www.php.net/manual/en/function.pack.php

谢谢!在


Tags: 代码https目的formatdocs格式structphp
2条回答

如果使用两个4字节的无符号long long(NN格式,在PHP中)解压8字节无符号long long,那么可以对第一个long 32位进行位移位,并将其添加到第二个long中,以恢复8字节的无符号long 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位,然后将其与第二个数字相加。在

^{pr2}$

这表明原始号码c已恢复:

In [55]: assert (a<<32)+b == c

以下顺序:

!LLLL

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

^{pr2}$

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

相关问题 更多 >

    热门问题