当前位置: 首页 > 面试题库 >

如何使用ctypes打包和解压缩(Structure <-> str)

唐俊英
2023-03-14
问题内容

这可能是一个愚蠢的问题,但我在文档或任何地方都找不到好的答案。

如果我使用 struct 定义二进制结构,则该结构具有2种对称的序列化和反序列化方法(打包和解包),但是 ctypes
似乎没有直接的方法。这是我的解决方案,感觉不对:

from ctypes import *

class Example(Structure):
    _fields_ = [
        ("index", c_int),
        ("counter", c_int),
        ]

def Pack(ctype_instance):
    buf = string_at(byref(ctype_instance), sizeof(ctype_instance))
    return buf

def Unpack(ctype, buf):
    cstring = create_string_buffer(buf)
    ctype_instance = cast(pointer(cstring), POINTER(ctype)).contents
    return ctype_instance

if __name__ == "__main__":
    e = Example(12, 13)
    buf = Pack(e)
    e2 = Unpack(Example, buf)
    assert(e.index == e2.index)
    assert(e.counter == e2.counter)
    # note: for some reason e == e2 is False...

问题答案:

PythonInfo Wiki为此提供了解决方案。

常见问题解答:如何从ctypes.Structure复制字节到Python?

def send(self):
    return buffer(self)[:]

常见问题解答:如何从Python复制字节到ctypes.Structure?

def receiveSome(self, bytes):
    fit = min(len(bytes), ctypes.sizeof(self))
    ctypes.memmove(ctypes.addressof(self), bytes, fit)

它们send(或多或少)等同于packreceiveSome有点像pack_into。如果遇到“安全”情况,您要解压缩为与原始结构相同类型的结构,则可以将其单行
memmove(addressof(y), buffer(x)[:], sizeof(y))复制xy。当然,您可能会有一个变量作为第二个参数,而不是字面量的x



 类似资料:
  • 问题内容: 是否有任何模块可以为nodejs提供打包/解压缩功能,类似于python的struct模块?我还没有找到专门针对节点的任何东西,并且我认为javascript的实现会明显慢一些。 谢谢。 问题答案: https://github.com/pgriess/node-jspack似乎是Python API的直接端口,用于打包二进制数据,但是它是用JS实现的。它似乎尚未打包为npm。 htt

  • 问题内容: 我知道这是一项容易的任务,但是更改代码后它停止工作,并且无法恢复!我实际上使用了两个函数来进行压缩和解压缩,尽管实际上它是“ jar”和“ unjar”,但这并没有太大的区别 任何帮助/建议吗? 创建JarFile时发生错误: 问题答案: 我不知道这是否是您的问题,但是通常最好在完成写入后关闭每个zip条目。 请参阅。 在显示的代码中,不会关闭邮政编码中的最后一个条目。您也不会显示关闭

  • 本文向大家介绍Android如何实现压缩和解压缩文件,包括了Android如何实现压缩和解压缩文件的使用技巧和注意事项,需要的朋友参考一下 废话不多说了,直接给大家贴java代码了,具体代码如下所示: Java代码 代码到此结束,关于Android实现压缩和解压缩文件的全内容就给大家介绍这么多,希望能够帮助到大家!

  • 在讲解具体的归档命令和压缩命令之前,先来了解一下归档和压缩所各自代表的含义。 归档,也称为 打包,指的是一个文件或目录的集合,而这个集合被存储在一个文件中。归档文件没有经过压缩,因此,它占用的空间是其中所有文件和目录的总和。 通常,归档总是会和系统(数据)备份联系在一起,不过,有关数据备份的内容,留到后续章节讲,本章仅学习归档命令的基本使用。 和归档文件类似,压缩文件也是一个文件和目录的集合,且这

  • 又一款与PHP解压缩相匹配的打包(压缩)工具,其特点是可以在远程服务器上方便、快速的压缩文件,并且提供下载链接,方便下载,是网站备份的好工具。其他用途有待开发!(声明:此程序为开源程序,本人只是对其二次修改,不存在版权问题,可随意下载、转载) 使用方法: 下载到本地之后,上传PHPZip.php文件到你的服务器上,对其进行访问。 默认密码:xibo123 修改密码方法:在地址栏访问你服务器上PHP