如何在python中解压12个字节? php代码可用!试图将其转换为 python
Posted
技术标签:
【中文标题】如何在python中解压12个字节? php代码可用!试图将其转换为 python【英文标题】:how to unpack 12 bytes in python? php code available! trying to convert it to python 【发布时间】:2021-12-26 19:26:42 【问题描述】:我正在尝试将 php 函数转换为可解码和解压缩字符串的 Python。
问题是当我尝试在 python 中解压字符串时出现错误。
这是 PHP 代码:
<?php
function link2id($encoded)
$decoded = base64_decode(strtr($encoded, '-_', '+/'));
$cid = unpack("N3", $decoded);
$cid = $cid[1] <= 999999999 ? $cid[2] : $cid[1];
$cid = "-100$cid";
return $cid;
echo link2id("Rm8lfiWrZbVHP5nM")
?>
这是我设法创建的 python 代码:
import base64
from struct import unpack
def link2id(encoded):
decoded = base64.b64decode(encoded)
cid = unpack("L", decoded) # I get error in this line
cid = cid[2] if cid[1] <= 999999999 else cid[3]
return f"-100cid"
link2id("Rm8lfiWrZbVHP5nM")
这是错误:
Traceback (most recent call last):
File "E:\HadiH2o\Documents\_MyProjects\Python\_github\End2End\src\plugins\ETC.py", line 13, in <module>
link2id("Rm8lfiWrZbVHP5nM")
File "E:\HadiH2o\Documents\_MyProjects\Python\_github\End2End\src\plugins\ETC.py", line 8, in link2id
cid = unpack("L", decoded)
struct.error: unpack requires a buffer of 4 bytes
我知道解码的类型是bytes,长度是12。 但我不知道如何解决这个错误。
python struct [docs][2] 这么说 L 解包:
格式 = L - C 类型 = unsigned long - Python 类型 = 整数 - 标准大小 = 8 - 注释 = (1)
我的猜测是我在 python 中的 cid 大小太大而无法解包。但我不知道该怎么做。 请帮忙!
【问题讨论】:
【参考方案1】:要解压 3 个整数,请使用 III:
def link2id(encoded):
decoded = base64.b64decode(encoded)
cid = unpack("III", decoded) # 3 unsigned int
# python array start at 0
cid = cid[1] if cid[0] <= 999999999 else cid[2]
return f"-100cid"
【讨论】:
它有效,但不是我想要的结果。我想要的结果是 -1001181689214 但我得到了这个:-1003432595271以上是关于如何在python中解压12个字节? php代码可用!试图将其转换为 python的主要内容,如果未能解决你的问题,请参考以下文章